C++ -- 将元素添加到私有成员字段 std::vector

C++ -- Adding elements to private member field std::vector

本文关键字:成员 字段 std vector 元素 添加 C++      更新时间:2023-10-16
class T {
private:
  std::vector<T> myVec;
  // ...
public:
  T();
  T(float x, float y);
  std::vector<T> getMyVec() { return myVec; }
  // ...
};

在 T 中.cpp我不以任何方式使用 myVec(也不在构造函数中)

在Tmain.cpp:

int main() {
  T myT;
  std::cout << myT.getMyVec().size() << std::endl; // 0
  T anotherT(1.1, 2.2);
  myT.getMyVec().push_back(anotherT);
  std::cout << myT.getMyVec().size() << std::endl; // 0
}

希望我能说清楚(假设我的 #include 等是正确的):

所以基本上,我有一个类T,其中我有一个名为myVec的私有成员字段,其类型为std::vector。我还有一个公共(get-)函数来访问该字段。主要情况下,我为自己创建一个 T 对象,并打印出它的 myVec.size()。它是零,因为我还没有对向量做任何事情。我创建了另一个 T 对象并将其push_back() 到前一个 T 对象的向量字段中。我再次打印出前一个对象的 myVec.size()(我希望此时它是 1,因为我已经向其添加了另一个 T。但它仍然返回 0 作为其大小。为什么?我怎样才能让它"保存"我尝试添加到其中的对象?

std::vector<T> getMyVec() { return myVec; }

应该是

std::vector<T>& getMyVec() { return myVec; }

否则,您将返回会员的副本。

您需要返回对私有向量的引用。

std::vector<T>& getMyVec() { return myVec; }

否则它将返回副本。您对副本所做的任何更改都不会影响您在类中的向量。