关于vector的一些实用注意

来源:互联网 发布:群智能算法 编辑:程序博客网 时间:2024/04/28 01:33

最重要的有两点:vector是拷贝push_back输入的一份副本,需要注意你所需要的究竟是一个指针一个引用还是一个新的对象?vector的内存重新分配问题,考虑如下代码:

int* p = NULL;
 vector<int*> a;
 vector<int> b;
 for(int i = 0;i < 11;i++){
b.push_back(i);
        a.push_back(&b.at(i));
 }

 for(int i = 0;i < 11;i++){
cout<<*(a.at(i))<<endl;
 }

运行会是什么结果呢?在dubug中前面大部分值是随机数,那么这是为什么呢?这就涉及到vector的内存分配问题了,由于vector是一种线性容器,要求分配内存中的一片连续空间,当当前分配的内存用完的时候,vector就会自动分配一块更大的空间,并将原来的空间释放,那么问题就出来了,向量a里面的指针并没有跟着变化而指向原来的位置,原来的位置上肯定没有现在的值,那自然会使一些不清楚的值咯,解决方法之一就是先用reserve固定b的大小,方法二就是先将向量a放好,在确定向量b如下代码:

int* p = NULL;
 vector<int*> a;
 vector<int> b;
 for(int i = 0;i < 11;i++){
b.push_back(i);
        a.push_back(&b.at(i));
 }

 for(int i = 0;i < 11;i++){

int* p = NULL;
 vector<int*> a;
 vector<int> b;
 for(int i = 0;i < 11;i++){
b.push_back(i);
 }

 for(int i = 0;i < 11;i++){
a.push_back(&b.at(i));
 }

好了,问题解决!
原创粉丝点击