【发布时间】:2010-03-15 13:26:07
【问题描述】:
由于向量元素是连续存储的,我猜在一些 push_back 之后它可能没有相同的地址,因为初始分配的空间不够。
我正在编写需要引用向量中元素的代码,例如:
int main(){
vector<int> v;
v.push_back(1);
int *ptr = &v[0];
for(int i=2; i<100; i++)
v.push_back(i);
cout << *ptr << endl; //?
return 0;
}
但ptr 不一定包含对v[0] 的引用,对吧?怎么保证?
我的第一个想法是使用指针向量和动态分配。我想知道是否有更简单的方法可以做到这一点?
PS.:实际上我使用的是类的向量而不是 int,但我认为问题是相同的。
【问题讨论】:
-
为什么不只在需要时获取
&v[0]? -
您可以保留元素的索引而不是指针,然后使用 at() 或 operator[] 访问它
-
@KennyTM 虽然:上面没有明确说明,但在我的实际代码中,我无法确定在需要时访问哪个索引。
-
@Dmitry Yudakov:好主意!不幸的是,我意识到使用这种方法需要我做很多更改,因为我已经在代码的其他部分使用了带有指针的结构,但是由于我预先分配了向量,所以没有问题。