gpt4 book ai didi

c++ - 我怎样才能指向 vector 元素?

转载 作者:行者123 更新时间:2023-11-30 02:46:12 26 4
gpt4 key购买 nike

a) 指向 vector 元素的地址是否安全?

unsigned int* ptr;
std::vector<unsigned int> vec;
vec.resize(10);
vec[0] = 10;
ptr = &vec[0];

在我看来,只要我不改变预分配 vector 的大小,&vec[0] 的地址就不会改变。我的问题是,只要它是预分配的,指向 vector 元素是否安全。

b) 如果我不预先分配 vec 的大小,&vec[0] 的地址似乎会改变。如果我通过 vec.push_back() 将附加值推送到 vector 。我想要一个指向索引 vector 的指针 vector 。

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

最佳答案

看起来 index_vec vector 之前没有调整大小,添加第二个项目“1”导致 STL 分配更多内存,从而将原始缓冲区移动到其他地方。

尝试重新调整 index_vec vector 的大小以保留缓冲区。

例如使用 index_vec.resize(10); 来保留 10 个位置的内存。

编辑对于你的问题——“安全”取决于用法……它是可行的,但指向 STL vector 内部缓冲区可能非常不安全。

如果 vector 是预先分配的,(使用调整大小)项目的地址被保留。但是如果你将 1 个额外的项目推到 vector 中,STL 可能会改变内存位置(这就是 STL 的好处......内存管理由库拥有,而不是我们;-))

关于c++ - 我怎样才能指向 vector 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23791454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com