2015-10-09 57 views
0

我初始化了向量的向量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()方法。但我看不出問題在哪裏。

+0

不要編輯你的問題來說明你的問題已經解決,請標記最能幫助你的答案。這是Stack Overflow中常見的操作。無論如何,如果你認爲所有人都同樣好,你不需要這樣做。 –

回答

0

您遇到的問題是get函數返回你的載體,而不是實際載體的拷貝。你可以做幾件事情:

  1. 獲得一個指向內部與此vector<int> * get(..和derefernce它(這是非常不好的不做這
  2. 返回引用到矢量vector<int> &get(..好轉,但仍
  3. 只要用你的vector直線上升,功能GET不會增加效益,矢量已經有一個at命令(以及operator [])。

Here is a live example.

+0

謝謝你的回答。我實際上簡化了我的代碼。實際的vec在我的真實代碼中是私人的,因此我正在爲它添加一個訪問器。我會按照建議返回一個參考。謝謝! – ZigZagZebra

0

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

更改您的代碼

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

大壩吧,每次...只是打敗我。 –

+0

Bah。你們都打敗了我。不要聽到我發牢騷。不。沒有抱怨。 * SOB!* – user4581301

+0

@Ben從我的平板電腦,認真嗎?哇,我越來越好,使用它;-) –

2

您希望返回對矢量的引用,而不是副本。

變化

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

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

爲了返回引用。