我有一个带有双向私有向量的类。 要访问或修改这些值,首先我使用了
等方法void classA::pushVector(double i)
{
this->vector.push_back(i);
}
double classA::getVector(int i)
{
return vector[i];
}
这已经工作了一段时间,直到我发现我必须为我需要的东西超载很多操作符,所以我试图改变它来直接获取和设置向量而不是值,即。
void classA::setVector(vector<double> vector)
{
this->vector = vector;
}
vector<double> classA::getVector()
{
return vector;
}
现在,假设有一个classB,它有一个私有的classA元素,它也有get和set方法来读写。问题是当我试图将值推回到classA中的结束向量时。
void classB::setFirstValue(double first)
{
this->getClassA().getVector().push_back(first);
}
这对矢量没有任何作用。它保持不变,我无法弄清楚为什么......任何想法?
答案 0 :(得分:3)
您将在getVector()中按值返回向量。这意味着在您的调用“this-&gt; getClassA()。getVector()。push_back(first);”中,您复制了该向量,然后将该元素推送到副本上。然后立即丢弃该副本。
为了让它以您想要的方式工作,您需要通过引用返回向量。您的方法如下:
“vector&amp; classA :: getVector()”
答案 1 :(得分:2)
在这种方法中:
void classA::setVector(vector<double> vector)
{
this->vector = vector;
}
您正在传递矢量的副本。要传递实际矢量,您需要一个参考:
void classA::setVector(vector<double> & vector)
{
this->vector = &vector;
}
并且类中的向量变量必须是指针。
这一切对我来说都是非常不受欢迎的 - 我会重新思考你的班级实际上在做什么。对于类来说,管理向量比对它维护指向类外的指针更有意义。如果你需要重新实现所有的类方法,也许你根本不需要te类,只需要一个向量。