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

时间:2014-12-28 10:53:36

标签: c++ vector size field push-back

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()。它是零,因为我还没有对矢量做任何事情。我将 anotherT 对象和 push_back()创建到前一个T对象的矢量字段中。 我再次打印出前一个对象的 myVec.size()(我希望此时它是1,因为我已经添加了 anotherT 。但它仍然会返回0作为其大小。为什么会这样?我怎样才能使它“保存”我尝试添加的对象?

2 个答案:

答案 0 :(得分:1)

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

应该是

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

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

答案 1 :(得分:0)

您需要返回对私人媒介的引用。

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

否则它将返回一份副本。无论你对副本做出什么改变都不会影响你在课堂上的矢量。