矢量向量推回

时间:2015-10-09 01:00:04

标签: c++ vector

我初始化了一个int向量的向量。内部向量的大小是任意的。 我读了相关的问题,但仍然无法解决我的问题。

vector<vector<int> > vec;
vector<int> get(int i) {
  return vec[i];
}

int main() {
  vec.resize(5);  // Only the first dimension has the fixed size
  get(2).push_back(2);  // If I do vec[2].push_back(2), it will work
  get(1).push_back(34);
  for (int i = 0; i < 5; ++i) {
    cout << vec[i].size() << endl;  // output: 0
    for (int j = 0; j < vec[i].size(); ++j) {
       cout << vec[i][j] << endl;
    }
  }
}

当我使用get()方法时,我认为出了问题。但我看不出问题出在哪里。

3 个答案:

答案 0 :(得分:2)

您想要返回对向量的引用,而不是副本。

更改

vector<int> get(int i) {
  return vec[i];
}

vector<int>& get(int i) {
  return vec[i];
}

为了返回参考。

答案 1 :(得分:0)

问题是,你从get返回一个副本,而不是你想要解决的实际实例。

将您的代码更改为

vector<int>& get(int i) {
        // ^
    return vec[i];
}

答案 2 :(得分:0)

您遇到的问题是get函数返回的是矢量的副本,而不是实际的矢量。你可以做几件事:

  1. 使用此vector<int> * get(..获取指向内部的指针并将其降级(这是非常糟糕的不要这样做
  2. 返回对向量vector<int> &get(..的引用(更好,但仍然
  3. 只需直接使用vector,函数get就没有任何好处,vector已经有at命令(以及operator [])。
  4. Here is a live example.