【发布时间】:2011-03-18 07:09:53
【问题描述】:
我有一个std::vector,其中包含某些类ClassA 的元素。此外,我想使用 std::map<key,ClassA*> 创建一个索引,它将一些键值映射到指向向量中包含的元素的指针。
当元素被添加在向量的末尾(不是插入)时,是否有任何保证这些指针仍然有效(并指向同一个对象)。即,以下代码是否正确:
std::vector<ClassA> storage;
std::map<int, ClassA*> map;
for (int i=0; i<10000; ++i) {
storage.push_back(ClassA());
map.insert(std::make_pair(storage.back().getKey(), &(storage.back()));
}
// map contains only valid pointers to the 'correct' elements of storage
如果我使用std::list 而不是std::vector,情况如何?
【问题讨论】:
-
这里vector的作用是什么?您需要记住它们的创建顺序吗?您可以改用 map
和 vecor 。对映射元素的迭代器/指针/引用的有效期更长。查看您最喜欢的标准库参考的保证。
标签: c++ stl pointers stdvector