【发布时间】:2015-10-23 08:44:22
【问题描述】:
我给出以下代码来说明我的问题,你可以在http://cpp.sh/
// Example program
#include <iostream>
#include <string>
#include <vector>
int main()
{
int *p;
p = new int [10];
for(int i=0; i<10; i++)
p[i] = i;
std::vector<int> vecArray(p,p+10);
vecArray[3]=300;
for(int i=0; i<10; i++)
std::cout<<vecArray[i]<<std::endl;
for(int i=0; i<10; i++)
std::cout<<p[i]<<std::endl;
delete []p;
}
从代码中我们可以看出,在使用指针p初始化向量vecArray之后,当向量的内容发生变化时,不会影响指针中的内容。我的问题是:vctor 的内容怎么可能总是与指针相同?
【问题讨论】:
-
您希望
p[3]中的值在vecArray[3]=300;之后更改吗? -
所有容器类都存储数据的硬拷贝,否则它们将毫无用处。
-
@SingerOfTheFall 是的。
-
vector<>的要点 是它能够在添加元素时动态调整大小。如果它需要更多内存,vector<>会为其包含的数据分配新内存,将旧数据复制到新内存位置,然后释放旧内存。应该清楚的是,在这一点上vector<>仍然无法引用与p相同的内存,即使您设法像最初那样设置它们。 --- 我怀疑我们在这里查看的是 X-Y 问题。 原始问题是什么,您试图用这个向量引用相同的内存作为数组作为解决方案来解决?