如何将值从非 const 向量复制到 C++ 中的 const 向量?

问题描述

我有以下类,其中有一个私有成员 vectortest,我想将其用作类成员函数中操作的计算变量。然后,我将计算出的向量复制到另一个向量 cvectorin,它是一个公共成员但一个常量,因此内容不能被修改,但可以访问。我尝试了以下操作(包括赋值和 std::copy):

class constVecTest
{
  private:
    vector<int> vectortest;
  public:
    constVecTest(vector<int> vin);
    const vector<int> cvectorin;
    vector<int> vectorin;
    void vecop1();
    void vecop2(vector<int> vin);
};

constVecTest::constVecTest(vector<int> vin)
{
  vecop1();
  vecop2(vin);
}

void constVecTest::vecop1()
{
  vectortest = {1,1,1};
  // cvectorin = vectortest;
  copy(vectortest.begin(),vectortest.end(),back_inserter(cvectorin));
}

void constVecTest::vecop2(vector<int> vin)
{
  vectortest = vin;
  vectorin = vectortest;
}


int main()
{
  vector<int> input {1,2,3,4,5},cvo,cvc;

  constVecTest cvt(input);
  cvo = cvt.vectorin;
  cvc = cvt.cvectorin;
  
  return 0;
}

但我收到错误

error: passing ‘const std::vector<int>’ as ‘this’ argument discards qualifiers [-fpermissive]

我是向量的新手,在这种情况下找不到任何好的例子。我如何实现我想要的?如果上述方法不正确,我很乐意学习新的替代方法

解决方法

如评论中所述,更好的方法是将您的 API 更改为如下所示:

class constVecTest
{
  private:
    vector<int> vectortest;
    vector<int> cvectorin;
  public:
    constVecTest(vector<int> vin);
    const vector<int> &get_cvectorin() const { return cvectorin; }
    vector<int> vectorin;
    void vecOp1();
    void vecOp2(vector<int> vin);
};

现在公共访问是const,所以外部用户不能修改向量,但是你的私有成员可以自由修改它。

,

const 成员在第一次创建后无法修改,即使从构造函数的主体中也是如此。

但是通过重新排列,您可以改变如何首次创建该成员:

class constVecTest
{
  private:
    vector<int> vectortest;
    static vector<int> vecOp1();
  public:
    constVecTest(vector<int> vin);
    const vector<int> cvectorin;
    vector<int> vectorin;
    void vecOp2(vector<int> vin);
};

constVecTest::constVecTest(vector<int> vin)
    : vectortest(),// Create this one empty.
      cvectorin(vecOp1()),// Create cvectorin from the result of vecOp1().
      vectorin()            // Another empty.
{
    vecOp2(vin);
}

vector<int> constVecTest::vecOp1()
{
    vector<int> result = {1,1,1};
    return result;
}