c ++如何使用其他点和只读数据创建两个向量

时间:2010-10-09 20:09:13

标签: c++ pointers stl reference vector

在C ++中,我有2个STL向量AVA包含数据且能够更改数据,V仅指向数据,但只能读取而无法修改数据。因此,如果这两个向量在类中,那么

的语法
  1. 变量定义
  2. A引用分配到V
  3. get_A()和get_V()会返回引用还是指针?
  4. 此外,如果我有其他常规向量,例如ABCD,我可以将其引用“插入”V以便V可以一个一个地看到它们?清算V.size()将等于A.size() + B.size() + C.size()


    很抱歉混淆,我想我是以错误的方式提出问题

2 个答案:

答案 0 :(得分:1)

  1. 向量将声明为

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

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

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

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

  4. 关于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()版本。