我初始化了一个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 :(得分: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
函数返回的是矢量的副本,而不是实际的矢量。你可以做几件事:
vector<int> * get(..
获取指向内部的指针并将其降级(这是非常糟糕的不要这样做 vector<int> &get(..
的引用(更好,但仍然)vector
,函数get就没有任何好处,vector已经有at
命令(以及operator []
)。