如何将值从非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, 0, 1, 0, 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,所以外部用户不能修改vector,但是私有成员可以自由地修改vector。

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, 0, 1, 0, 1};
return result;
}

最新更新