すみません、C++のSTLは初めてです。それぞれが5つのint要素のベクトルを指す10個のベクトルポインタの配列を初期化するにはどうすればよいですか。
私のコードスニペットは次のとおりです。
vector<int>* neighbors = new vector<int>(5)[10]; // Error
ありがとう
これにより、10個のvector<int>
を含むベクターが作成されます。それぞれに5つの要素があります。
std::vector<std::vector<int>> v(10, std::vector<int>(5));
外側のコンテナのサイズが固定されている場合、might代わりにstd::array
を使用する必要があることに注意してください。初期化はより冗長であることに注意してください。
std::array<std::vector<int>, 10> v{{std::vector<int>(5),
std::vector<int>(5),
std::vector<int>(5),
std::vector<int>(5),
std::vector<int>(5),
std::vector<int>(5),
std::vector<int>(5),
std::vector<int>(5),
std::vector<int>(5),
std::vector<int>(5)
}};
また、配列の内容は配列の一部であることに注意してください。 sizeof
で指定されたサイズはvector
バージョンよりも大きく、利用可能なO(1)移動またはスワップ操作はありません。std::array
は、固定サイズの自動ストレージプレーンアレイに似ています。
@chrisがコメントで示唆しているように、配列の要素afterをデフォルトの初期化に設定することを選択できることにも注意してください。 std::fill
を使用して、すべてが同じ値である場合:
std::array<std::vector<int>, 10> v; // default construction
std::fill(v.begin(), v.end(), std::vector<int>(5));
それ以外の場合は、個々の要素を設定/変更できます。
v[0] = std::vector<int>(5); // replace default constructed vector with size 5 one
v[1].resize(42); // resize default constructed vector to 42
等々。