這裏是我的整數的2D矢量。爲什麼我不能在C++中將整數向量推送到整數的2-D向量?
vector<vector<int>> nodes (r*c, vector<int> (5));
使用for循環,我想在這個載體的push_back值。 r和c將整數傳遞給這個函數。
for(i = 0; i < r*c; i++)
{
nodes[i].push_back({i/c, i%c, -1, -1, 0});
}
這裏是我的整數的2D矢量。爲什麼我不能在C++中將整數向量推送到整數的2-D向量?
vector<vector<int>> nodes (r*c, vector<int> (5));
使用for循環,我想在這個載體的push_back值。 r和c將整數傳遞給這個函數。
for(i = 0; i < r*c; i++)
{
nodes[i].push_back({i/c, i%c, -1, -1, 0});
}
nodes[i]
是整數的向量。您正試圖將矢量附加到整數向量中。
要麼是:
nodes.push_back({i/c, i%c, -1, -1, 0});
或
nodes[i] = {i/c, i%c, -1, -1, 0};
第二個解決方案是最好的,因爲你已經給了適當的層面,你的載體。無需添加r*c
更多的元素......
在你的代碼,或者創建空的,填充push_back
:
std::vector<std::vector<int>> nodes;
for(i = 0; i < r*c; i++)
{
nodes.push_back({i/c, i%c, -1, -1, 0});
}
或適當的尺寸創建和分配項目:
std::vector<std::vector<int>> nodes (r*c, std::vector<int> (5));
for(i = 0; i < r*c; i++)
{
nodes[i] = {i/c, i%c, -1, -1, 0};
}
使用方法insert
而不是push_back
nodes[i].insert(nodes[I].end(), {i/c, i%c, -1, -1, 0});
不過在此之前,你應該申報的載體像
vector<vector<int>> nodes (r*c);
每個子向量將包含零的要不要先5個元素。你
也可以使用方法assign
nodes[i].assign( {i/c, i%c, -1, -1, 0});
這不是問題。 '節點[i]'是_integers_的向量。你不能在其中插入一個向量。這就是爲什麼'push_back'失敗(和'插入'編譯,但上帝知道它在做什麼。Segfault here) –
@ Jean-FrançoisFabreНщг你錯了。它不是插入的矢量。它是插入的初始化程序列表的值。 –
我還有一個疑問,你顯然沒有測試,因爲'節點[i] .insert(節點[I] .end(),{i/c,i%c,-1,-1,0} );'不編譯('我'未申明)。還有'nodes.insert(nodes.end(),{i/c,i%c,-1,-1,0});'編譯! –
嗨吉恩,非常感謝!這解決了問題! – Ishrat