c++如何使两个 vector 一个带有数据另一个指向并且只读

标签 c++ pointers stl reference vector

在 C++ 中,我有 2 个 STL vector AVA 有数据并且可以改变它,V 只指向数据但是只读并且不能修改它。因此,如果这两个 vector 在一个类中,

的语法是什么
  1. 变量定义
  2. A 引用分配给 V
  3. get_A() 和 get_V() 会返回引用还是指针?

此外,如果我有其他法 vector ,如 ABCD,我可以将它们的引用“插入”到 V 中,以便 V 可以一一看到它们?对于间隙 V.size() 将等于 A.size() + B.size() + C.size()


对不起,我想我问错了问题

最佳答案

  1. vector 将声明为

    vector<Data> A;
    vector<const Data *> V;
    

    (请注意,V 不能是 const Data & 的 vector ,因为引用不可分配,并且 vector 需要 Assignable 模板类型。)

  2. 将引用从 A 分配给 V 如下所示:

    V[i] = &A[i];
    
  3. 我不确定您所说的 get_A 和 get_V 是什么意思。我最好的猜测是你指的是 operator[] 在 A 和 V 上的结果是什么。 A[i] 返回对数据的引用,即 Data&V[i] 技术上返回对 const Data 指针的引用,即 const Data * &,但实际上您会将其用作指针,即 const数据*

关于 A、B 和 C 的问题:如果它们都是相同类型的 vector ,并且它们的大小不变,则可以将 V 设置为包含指向其中每个元素的指针。但是,如果它们确实改变了大小,那么在设置 V 之后向 A 添加一个元素将意味着您必须将指向 A 的新元素的指针插入到 V 的正确偏移量中,这是可能的,但看起来像一个麻烦。

设置此类 V 的快速示例如下所示:

vector<Data const *> V;
for (size_t i = 0; i < A.size(); ++i) { V.push_back(&A[i]); }
for (size_t i = 0; i < B.size(); ++i) { V.push_back(&B[i]); }
for (size_t i = 0; i < C.size(); ++i) { V.push_back(&C[i]); }

关于c++如何使两个 vector 一个带有数据另一个指向并且只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3897682/

相关文章:

c++ - 我可以将递归函数的返回值设置为常量吗?

c++ - 具有相同头文件名的 CMake 依赖项冲突

python - 在 Python 中比较两个指针位置

c++ - 无法理解如何将新对象添加到 std::list<std::unique_ptr<classname>>

C++ 将成员变量传递给成员类

python - C++:仅在具有指定索引的元素中查找数组中的最小值

c++ - 指向派生派生类的 vector 的指针

c++ - std::stack.top() 更改元素的成员(这是一个指针)

c++ - 对象指针 vector ,一般帮助和混淆

c++ - 如何在 C++ 中使用 "interface"