我有以下类,其中我有一个私有成员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;
}