如何知道何时重新分配向量的内部数组
How to know when a vector’s internal array is reallocated?
我有一个包含很多元素的std::vector
。由于向量很大,我将指向某些特定元素的指针存储在另一个向量中,以便能够更快地访问它们。但是随着向量的增长,有时它的内部容器会被重新分配,导致我所有的指针都变得无效。
有没有办法知道这种情况何时发生?这样我就可以更新其他列表中的指针。
你不应该存储指针,你应该存储索引:
即,代替 :
var1 = &vector[0];
var2 = &vector[13];
和访问*var1
,*var2
您应该存储:
i1 = 0;
i2 = 13;
和访问vector[i1]
,vector[i2]
注意:如果使用修饰符方法,您仍然应该小心:
-
pop_back()
(使最后一个位置无效) -
erase(i)
(移动大于 i 的所有索引) - 等。。。
(您的第一种方法具有相同的警告)
也许你应该看看boost::container::stable_vector:http://www.boost.org/doc/libs/1_51_0/doc/html/boost/container/stable_vector.html
您可以存储指向各个元素的指针,而不是直接将元素存储在大向量中。因此,您可以使用std::vector<int *>
而不是std::vector<int>
。即使向量重新分配其内容,数据本身的地址也不会更改,因此指向它的其他指针将保持有效。但是,这要求您使用 new
创建输入到向量中的每个元素,然后手动delete
任何被删除的数据。
我很
抱歉,我的评论完全错误。 N3337 23.3.6.3 vector capacity paragraph 5
:
备注:重新分配会使所有引用、指针和 引用序列中元素的迭代器。这是有保证的 在插入期间不会发生重新分配 调用以
reserve()
,直到插入将 向量的大小大于capacity()
的值。
相关文章:
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 如何修改 lambda 内部字符串的向量
- 为什么向量内部的指针在从函数返回时会发生变化?
- 如何创建一个函数来提取向量内部字符串中的字段?
- 为什么我不能更改实例化对象内部的向量?
- 指针(指向指针)和新/malloc 向量(向量内部)c++
- std::vector::clear()ing 二维向量线程的内部向量安全吗?
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 对内部有 2 对的向量进行排序
- C++:在循环内部或外部声明一个向量
- 输入内部 while 和向量
- STD ::向量如何调整其内部缓冲区大小
- 初始化向量的向量(外部向量和内部向量)
- 我的内部循环XML在C 向量中的预期无法正常使用Write_xml
- 向量C 内部的元素之和
- 在C++中,当两个向量类型不同时,如何将值存储到向量内部的向量中
- 如何推导函数内部向量的大小?(向量通过指向其第一个元素的指针传递)
- 无法从指针数组或向量内部访问指向对象的成员
- C++无法在创建静态向量后编辑该向量内部的向量项
- 如何在结构向量内部生成结构链接列表