2015-10-09 55 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]; 
} 

为了返回引用。