a)指向向量元素的地址是否安全?
unsigned int* ptr;
std::vector<unsigned int> vec;
vec.resize(10);
vec[0] = 10;
ptr = &vec[0];
在我看来,只要不更改预分配向量的大小,&vec [0]的地址就不会更改。我的问题是,只要预先分配矢量元素,是否可以安全地指向它。
b)如果我没有预先分配vec的大小,则&vec [0]的地址似乎会改变。如果我通过vec.push_back()将其他值推送到向量。我想有一个指向索引向量的指针向量。
std::vector<unsigned int*> ptr_vec(10,0);
std::vector<unsigned int> index_vec;
index_vec.push_back(0);
ptr_vec[0] = &index_vector[0];
ptr_vec[1] = ptr_vec[0];
index_vec.push_back(1); // at this point the adress of &index_vec[0] changes. thats my problem
因此,请回答您的实际问题:
我的问题是,只要可以预先分配矢量元素,是否可以安全地指向它
是的。只要您预先分配了它的内容,并且您没有以任何方式更改它的大小。
请阅读的文档,std::vector
以获取使此类指针操作不安全的方法列表。(搜索被称为“使指针无效”的方法。)
另外,请参阅此相关的问答,这与迭代器失效(一个类似的概念)有关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句