在 C++ 中,我有 2 个 STL vector A
和 V
。 A
有数据并且可以改变它,V
只指向数据但是只读并且不能修改它。因此,如果这两个 vector 在一个类中,
- 变量定义
- 将
A
引用分配给V
- get_A() 和 get_V() 会返回引用还是指针?
此外,如果我有其他法 vector ,如 A
、B
、C
和 D
,我可以将它们的引用“插入”到 V
中,以便 V
可以一一看到它们?对于间隙 V.size()
将等于 A.size() + B.size() + C.size()
。
对不起,我想我问错了问题
最佳答案
vector 将声明为
vector<Data> A; vector<const Data *> V;
(请注意,V 不能是
const Data &
的 vector ,因为引用不可分配,并且 vector 需要 Assignable 模板类型。)将引用从 A 分配给 V 如下所示:
V[i] = &A[i];
我不确定您所说的 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/