C++里vector怎么存放函数指针

C++里vector怎么存放函数指针,第1张

要动态生成mfc菜单,动态绑定响应命令。

首先把菜单关键词和函数指针绑定在map中,

再通过关键词找到函数来执行。

#include "stdafxh"

#include <vector>

#include <map>

#include <string>

using namespace std;

// 声明一个函数指针

int(pFunc)(int);

int func1(int nIn){return nIn + 1;}

int func2(int nIn){return nIn + 20;}

typedef int(pInt)(int);//定义别名才能放在vector中

void main()

{

    pFunc = func1;// 把函数名赋给函数指针

    int n = pFunc(1);

    pFunc = &func2;

    n = pFunc(1);

    //vector<int(pFun)(int)> v_pFunc;//不能这样定义

    //

    vector<pInt> v_pInt;

    v_pIntpush_back(func1);

    v_pIntpush_back(func2);

    int i = v_pInt[0](2);

    i = v_pInt[1](2);

    //

    map<string,pInt> map_pInt;

    map_pIntinsert(pair<string,pInt>("key1",func1));

    map_pIntinsert(pair<string,pInt>("key2",func2));

    int j = map_pInt["key1"](3);

    j = map_pInt["key2"](3);

}20121028更正vector可以直接放函数指针类型,没理解到位。

//vector只能放类型,不能放函数指针变量名

vector<int()(int)> v_pFunc;

v_pFuncpush_back(func1);

v_pFuncpush_back(func2);

int k = v_pFunc[0](5);

k = v_pFunc[1](5);

#include <vector>

using namespace std;

vector<int> pVec = new vector<int>;

pVec->push_back(10);

//cout << (pVec)[0] << endl;

delete pVec;

template<class _Ty,class _Ax =allocator<_Ty> >

class vector

{

public:

typedef typename _Alloc::pointer pointer;

private:

pointer _Myfirst;

pointer _Mylast;

pointer _Myend;

}

这些基本上是我从<vector>中找出来的。而其你正是用allocator来分配内存的,写不管_Alloc::pointer 是从哪里继承来的,但是它肯定是个指针,所以,以用模板加上指针一定能够实现向量,用allocator来分配内存当然最好!说实话,真的要做一个vector类非常难,也非常烦,且不说函数多(这都好说),关键是与迭代器的衔接问题。还有事一定要全,不然没有意义!

string是一个类(也是类型),如果你用的是模版,你不用管它究竟是什么类型,系统会给你处理的,内置类型,用户自定义类型(包括标准库里边的类)都一样,它是在编译期间才实现代码具体化的。我想你的错误应该处在模版指针的定义上了!

vector可以像数组一样访问,所以你可以用vector[1],vector[2],这样的方式去访问。或者可以使用迭代器vector::iterator去访问,这里就不具体介绍了。

   注意,任何改变容器大小的 *** 作都可能造成以前的迭代器失效。

是std中vector的实现机制问题。

vector不像数组那样分配了内存就不再变动了。

你压入新元素之后,std中vector重新分配变量的存储,你的指针地址没变,但是vector不再把原来的数据存在那个位置了。

我用vs2008调试了一下你的数据,说明了这一点。   Std我仅仅是拿过来用一下,具体实现机制并不是很了解细节,只是有个大概的假定认为std就应该是那样实现的,所以我的答案并不一定正确,LZ自行斟酌。

附:调试截图

我改了一下你的程序,重新调试,就更能说明问题了,调试截图如下:

如果p==abegin()-1,这个p已经越界了,自然会出问题,不能跟abegin()-1进行判断。如果你觉得p==abegin()之后会调出循环,少输一个a,那可以在循环外在加一次赋值,如 if (p==abegin()) { //赋值 } 或者把for循环改成do while循环。

呵呵,刚一时兴起,给你做了个例子。在mvc里写的代码,在页面上输出的。

页面上输出保存在ViewBag里的指针数组的数据。数据是str拼接的。

以上就是关于C++里vector怎么存放函数指针全部的内容,包括:C++里vector怎么存放函数指针、vector的指针怎么pushback、c++中的vector是如何保存string的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9329532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存