Questo crea un vettore contenente 10 vector<int>
, ognuno di quelli con 5 elementi:
std::vector<std::vector<int>> v(10, std::vector<int>(5));
Nota che se il la dimensione del contenitore esterno è fissa, è possibile che voglia utilizzare un std::array
. Nota che l'inizializzazione è più dettagliata:
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)
}};
Inoltre, il contenuto dell'array fa parte dell'array. La sua dimensione, come fornita da sizeof
, è maggiore della versione vector
e non è disponibile alcuna operazione di spostamento o scambio O (1). Un std::array
è simile a un array di archiviazione semplice a dimensioni fisse.
Si noti inoltre che, come suggerisce @chris nei commenti, è possibile scegliere di impostare gli elementi dell'array dopo l'inizializzazione predefinita, ad esempio, ad es. con std::fill
se sono tutti di avere lo stesso valore:
std::array<std::vector<int>, 10> v; // default construction
std::fill(v.begin(), v.end(), std::vector<int>(5));
in caso contrario, è possibile impostare/modificare i singoli elementi:
v[0] = std::vector<int>(5); // replace default constructed vector with size 5 one
v[1].resize(42); // resize default constructed vector to 42
e così via.
Non utilizzare 'new'. Un 'std :: array, 10>' suona più come quello che chiedi se non stai cambiando le dimensioni e se i miei sospetti sulla reale necessità di puntatori sono corretti. –
chris
L'equivalente in C++ sarebbe un 'vector>'. Qualche ragione per non usarlo? –
juanchopanza
Per favore fammi sapere maggiori dettagli? O un codice di esempio? – remo