私の2次元の整数ベクトルです。C++で整数のベクトルを整数の2次元ベクトルにプッシュできないのはなぜですか?
forループを使用しています。このベクトルの値をpush_backしようとしています。 rとcはこの関数に整数を渡します。
for(i = 0; i < r*c; i++)
{
nodes[i].push_back({i/c, i%c, -1, -1, 0});
}
私の2次元の整数ベクトルです。C++で整数のベクトルを整数の2次元ベクトルにプッシュできないのはなぜですか?
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};
あなたはすでにあなたのベクトルへの適切な次元を与えたので、最高であること第二の溶液
。空の作成、およびpush_back
を取り込むのいずれか、
r*c
以上の要素...あなたのコード内の
を追加する必要はありません:
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};
}
push_back
nodes[i].insert(nodes[I].end(), {i/c, i%c, -1, -1, 0});
の
使用方法insert
しかし、この前には、各サブベクトルのそれ以外の場合は最初の5つの要素はゼロが含まれます
vector<vector<int>> nodes (r*c);
のようなベクトルを宣言する必要があります。
また、あなたは方法assign
nodes[i].assign( {i/c, i%c, -1, -1, 0});
です問題ではありません。 'nodes [i]'は_integers_のベクトルです。ベクトルを挿入することはできません。それで 'push_back'が失敗する(そして' insert'はコンパイルされますが、神は何をしているのか分かります。) –
@ Jean-FrançoisFabreНщгあなたは間違っています。挿入されるベクトルではありません。挿入される初期化子リストの値です。 –
ノード{i} .end()、{i/c、i%c、-1、-1、0}は、 ); 'はコンパイルされません(' I'は宣言されていません)。 'nodes.insert(nodes.end()、{i/c、i%c、-1、-1、0});'コンパイル! –
こんにちはジーン、ありがとうございました!それが問題を解決しました! – Ishrat