2 wumingjishilunhui wumingjishilunhui 于 2017.01.10 09:44 提问

c++ vector 存储指针问题
    vector<int*> v;
    for (int i = 0; i < 5; i++)
    {
        int a = i;
        v.push_back(&a);
    }
如上代码,循环完结后,vector内存储的5个值都是4,每次改变a的值都会改变已经压入的v中的值,说明每次执行“int a = i”时都没有申请新内存,可是不是应该申请新的内存吗?菜鸟之见,求大神解答。

4个回答

jxhaha
jxhaha   2017.01.10 10:14

编译器优化的结果,楼主不用过于纠结,习惯就好,如果非要实现你想实现的结果,你可以这要写:

vector<int*> v;
    for (int i = 0; i < 5; i++)
    {
        int *a = new int;
        *a = i;
        v.push_back(a);
    }

wumingjishilunhui
wumingjishilunhui 是这样的,但是由于任务的需要,我需要使用std::sort对vector进行排序,当使用new申请内存时,std::sort不能成功
一年多之前 回复
voidar
voidar   2017.01.10 10:32
在你的这段代码中,vector在执行pushi_back函数时,系统在内存申请一段空间(sizeof(int *))用于存储int指针的地址;
    vector添加一个子元素,子元素本身就是一个指针,指向刚才申请的那段内存空间;
    vector内存储的5个值都是4,说明每个子元素指向的内存空间中存储的int指针地址数一样,是因为变量a在执行完一个循环后销毁,然后再执行下次循环的时候,再次申请变量a时,系统在栈上又将之前a的存储地址又分配给了现在定义的变量a;
shen_wei
shen_wei   Ds   Rxr 2017.01.10 15:26
vector<int> v;
    for (int i = 0; i < 5; i++)
    {
        v.push_back(i);
    }

这样不是更简单。。

shen_wei
shen_wei 存放指针本身就是浪费,直接存数值更好!!!
一年多之前 回复
wumingjishilunhui
wumingjishilunhui 是的,不过由于某些需要,想要使用vector存放指针,但是出现了问题,这小段代码只是我用来测试的
一年多之前 回复
sinat_33724606
sinat_33724606   2017.01.11 20:48

不知道你真正的需求是什么。这里看不出来。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c++ vector中存放指针
#include #include #include #include using namespace std; int main() { vector* > *ve = new vector* >(); pair *p1 = new pair("hello","world"); pair *p2 = new pair("ss","sdf"); ve->push_back(p1
vector中指针问题
根据搜索内容总结如下: vector ::iterator iter=spvec.begin();// string* 代表什么意思? while(iter!=spvec.end()) { coute()dl;//**代表什么意思? iter++; } vector ::iterator iter=spvec.begin(); //上面这句定义了一个迭代器,并指向了
c++ vector指针访问vector元素的方法
c++使用 vector指针访问vector元素时,不能简单的类似于c中数组和指针的方式。需要使用迭代器。int main() { vector s; vector *p = &s; s.push_back(1); for (vector::iterator it = p->begin(); it != p->end(); it++) cout << *it<<endl; //
关于Vector中存放指针的问题
关于Vector中存放指针的问题,在进行清空的时候比较安全的一种做法是:     std::vector ClassNameVec;     ...push_back(new ClassName());     std::vector::iterator ClassNameIt = ClassNameVec.begin();     for(;ClassNameIt != ClassNam
指针遍历vector向量
#include #include using namespace std; int main() { int a[] = {1,2,3,4}; vectornum(a,a+4); vector *p = # for(int i=0;i<num.size();i++) cout<<(*p)[i]<<endl; }
vector中存储指针 和 二维数组动态分配内存
int num = 2; vector v(16); v.push_back(NULL); v.push_back(&num); v.push_back(NULL); num = 5; v.push_back(&num); v.push_back(NULL); cout << v.size() << endl; num = 6; v[0] = # cout<< *v[0] <<endl; v[
vector容器中是否应该放指针?解决方法
vector容器中是否应该放指针? 今天在看《C++编程规范》的时候,看到里面提到一条,其中提及: 不要在vector容器中存储指针类型,如vector v; 如果要存储指针类型使用list list lst; 可书上没提及为什么 请您帮忙解释 谢谢 ------解决方案-------------------- 应该是有上下文的 ------解决方案-------
vector,iterator,指针
#include #include #include #include #ifndef NN #endif // NN using namespace std; int main() { int vv; vector vec; cin>>vv; while(vv>0&&vv<20) vec.push_back(vv--); v
vector 指针类型元素的释放
做项目的时候刚开始接触到stl的vector。其中用vector类型管理指针类型的元素。Code: #include "stdafx.h"    #include     #include     #include        #include     ///////////////////////////
C++中Vector保存 原始指针和智能指针的析构问题
1.C++的Vector 保存原始指针 的时候 Vector 析构的时候是不会释放指针指向的堆对象, 2.如果用Vector保存智能指针是可以释放智能指针 所指向的对象的 #include #include #include using namespace std; class Human {public: Human(){ cout << "con Human" << endl; }