我正在練習C++矢量,並在將元素插入2D矢量時發現問題。在下面的例子:將元素插入到C++中的2D矢量中的順序
#include <iostream>
#include <vector>
void fillVector(std::vector<std::vector<int> > &vec) {
std::vector<int> list1;
vec.push_back(list1);
list1.push_back(1);
list1.push_back(2);
std::vector<int> list2;
list2.push_back(3);
list2.push_back(4);
vec.push_back(list2);
return;
}
int main() {
std::vector<std::vector<int> > vect;
fillVector(vect);
std::cout << "vect size: " << vect.size() << std::endl;
for(int i = 0; i < vect.size(); i++) {
std::cout << "vect in size: " << vect.at(i).size() << std::endl;
}
}
所述第一內列表的大小是0,而第二內部列表的大小是2 list1
和list2
之間的唯一區別是,list1
被首先插入vec
在將元素插入到2D矢量之前,元素首先插入list2
,然後將其插入到2D矢量中。從函數返回後,插入到list1
中的元素不會被打印,並且其大小保持不變。
我也嘗試三分球的第一方法來代替,
std::vector<int> *list3 = new std::vector<int>();
vec.push_back(*list3);
list3->push_back(5);
list3->push_back(6);
但是,從調用函數讀取時項目list3的大小仍然是0。 我不明白,這兩種方法之間的差異。爲什麼在插入元素後列表必須添加?
在第一種情況下,您需要更改'list1.push_back(1); list1.push_back(2);'to'vec.back()。push_back(1); vec.back()。push_back(2);'否則你只需要添加項目到'list1'而不是'vec'。 – DimChtz
順便說一句,你的第三個解決方案(指針)基本上不起作用的原因是第一種情況不起作用,因爲你'push_back()'list3'的取消引用(只是list3的值)。 – DimChtz
在@DimChtz上展開評論:當您將某些東西放入「矢量」時,「矢量」存儲副本。操作原稿將不會影響副本。 – user4581301