要动态生成mfc菜单,动态绑定响应命令。
再通过关键词找到函数来执行。
#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的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)