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”时都没有申请新内存,可是不是应该申请新的内存吗?菜鸟之见,求大神解答。
在你的这段代码中,vector在执行pushi_back函数时,系统在内存申请一段空间(sizeof(int *))用于存储int指针的地址;
    vector添加一个子元素,子元素本身就是一个指针,指向刚才申请的那段内存空间;
    vector内存储的5个值都是4,说明每个子元素指向的内存空间中存储的int指针地址数一样,是因为变量a在执行完一个循环后销毁,然后再执行下次循环的时候,再次申请变量a时,系统在栈上又将之前a的存储地址又分配给了现在定义的变量a;

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

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

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

这样不是更简单。。

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