web-dev-qa-db-ja.com

定義済みのカウントでC ++のvector <int>の配列を初期化する方法は?

すみません、C++のSTLは初めてです。それぞれが5つのint要素のベクトルを指す10個のベクトルポインタの配列を初期化するにはどうすればよいですか。

私のコードスニペットは次のとおりです。

vector<int>* neighbors = new vector<int>(5)[10];  // Error

ありがとう

8
remo

これにより、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

等々。

17
juanchopanza