我有一个 vector std::vector<MyClass> myclass_vec(10)
有 10 个初始化对象 MyClass
.现在我想遍历这个 vector 并存储对每个 MyClass
的引用另一个 vector 中的对象 std::vector<MyClass> myclass_vec_refs
.我想存储引用的原因是因为我不必复制对象,显然,引用与 myclass_vec
中相同的对象。 .
出于某种原因,这不符合方面。我必须申报吗 std::vector<&MyClass> myclass_vec_refs
像这样?
当我浏览这里提出的其他问题时,我读到了关于 std::unique_ptr
的信息.如果我改变 std::vector<std::unique_ptr<MyClass>> myclass_vec(10)
那么我将无法在 myclass_vec_refs
中获得引用或指针因为它们被声明为唯一的。如果我弄错了,请纠正我。
另一种方法是使用 std::shared_ptr
.因为它有一个引用计数器,所以我可以拥有 myclass_vec_refs
指向 myclass_vec
中的对象,但我读到这引入了相当多的开销,share_ptr 应该只作为最后的手段使用。
我也不知道像我尝试的那样引用是否有效。如果 myclass_vec
中的对象会发生什么被删除?是 myclass_vec_refs
vector 调整大小 -1 因为对象不再存在或者它只是指向坏内存?
是否可以emplace_back
myclass_vec_refs
中的引用 vector ?因为这会就地创建对象,所以我想这行不通,只有 push_back
可以用吗?
最佳答案
您不能创建一个引用 vector 。 为什么?
引用必须始终引用实际对象,并且 vector 设计必须能够为您动态创建“空”对象(即默认构造函数)。
但是您可以创建一个指针 vector 。
如果以任何方式修改了另一个 vector ,您的指针将变得无效。 如果这对您来说是个问题,请改用 map 或设置。
关于c++ - 如何在 C++ 中将对来自一个 vector 的对象的引用存储在另一个 vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145696/