簡體   English   中英

向量推回向量

[英]vector of vector push back

我初始化了一個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()方法時會出錯。 但我看不出問題出在哪里。

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

更改

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

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

為了返回參考。

問題是,您從get返回了一個副本,而不是您要解決的實際實例。

將您的代碼更改為

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

您遇到的問題是get函數返回的是向量的副本,而不是實際的向量。 您可以做幾件事:

  1. 使用此vector<int> * get(..獲取指向內部的指針vector<int> * get(..並取消引用它( 這很糟糕,不要這樣做
  2. 返回對向量vector<int> &get(..的引用( 更好,但仍然
  3. 只需直接使用vector ,函數get不會增加任何好處,向量已經具有一個at命令(以及operator [] )。

這是一個實時示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM