在C ++中,我有2个STL向量A
和V
。 A
包含数据且能够更改数据,V
仅指向数据,但只能读取而无法修改数据。因此,如果这两个向量在类中,那么
A
引用分配到V
此外,如果我有其他常规向量,例如A
,B
,C
和D
,我可以将其引用“插入”V
以便V
可以一个一个地看到它们?清算V.size()
将等于A.size() + B.size() + C.size()
。
很抱歉混淆,我想我是以错误的方式提出问题
答案 0 :(得分:1)
向量将声明为
vector<Data> A;
vector<const Data *> V;
(请注意,V不能是const Data &
的向量,因为引用不是可分配的,而向量需要可分配的模板类型。)
将A中的引用分配给V将如下所示:
V[i] = &A[i];
我不确定get_A和get_V是什么意思。我最好的猜测是你指的是A和V上的operator []的结果。 A[i]
返回对数据的引用,即Data&
。 V[i]
在技术上返回对const数据指针的引用,即const Data * &
,但实际上你会将它用作指针,即const Data *
。
关于A,B和C的问题:如果它们是相同类型的所有向量,并且它们不改变大小,则可以设置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]); }
答案 1 :(得分:0)
我相信你所描述的内容类似于数据向量的const
别名。我所说的是你需要使用const引用来引导A
。
一个例子(完全出乎意料,但很好地描述了我对这种情况的建议和理解):
class someClass
{
public:
const std::vector & V() const
{
return A;
}
private:
std::vector<int> A;
};
从我const
获得的内容,当有人通过A
“访问”向量时,这会“保护”const
只显示someClass::V()
版本。