c++ - std::vector 的引用

标签 c++ vector stl

我有这样的问题:我有类 Foo,如果有这个类的一些对象,

Foo a();

我需要将此对象放入 2 个不同的 vector 中:

std::vector<Foo> vA, vB;

如果 avA 中发生变化,它应该在 vB 中发生变化, vector vA vB 可以不同,但​​它们可以有相同的对象。我知道可以使用 Boost,但我不能使用 Boost。

最佳答案

有一些可能性:

  1. 存储一个指针 vector (如果您的 vector 共享指针的所有权,则使用):

    std::vector<std::shared_ptr<Foo>> vA, vB;
    
  2. 存储包装引用的 vector (如果 vector 不共享指针的所有权,并且您知道所引用的对象在生命周期之后有效时使用 vector ):

    std::vector<std::reference_wrapper<Foo>> vA, vB;
    
  3. 存储原始指针 vector (如果您的 vector 不共享指针的所有权,和/或存储的指针可能会因其他因素而改变):

    std::vector<Foo*> vA, vB;
    

    这在观察、跟踪分配等方面很常见。原始指针的常见警告适用:不要使用指针在其生命周期结束后访问对象。

  4. 存储包装对象的 std::unique_ptr vector (如果您的 vector 想要移交指针的所有权在这种情况下使用生命周期引用的对象由 std::unique_ptr 类的规则管理):

    std::vector<std::unique_ptr<Foo>> vA, vB;
    

关于c++ - std::vector 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23488326/

相关文章:

c++ - 如何正确地将值分配给另一个结构 : 内的结构数组

c++ - 包含类函数的 vector

c++ - 从一个随机 double vector 制作多个 vector

c++ - 共享内存中的 STL 容器 (Windows)

c++ - STL 的 TCMalloc 分配器

c++ - TinyXML #include 问题...使用库

arrays - 在 Rust 中创建二维数组

c++ - Std::vector 填充时间在某个阈值后从 0ms 变为 16ms?

c++ - 标准库中有多少种不同的类模板排列?

c++ - 数据未存储以显示?