Gli array hanno una varietà di comportamento brutto a causa della compatibilità con C di C++. Uno di questi comportamenti è che gli array non sono assegnabili. Utilizzare invece std::array
o std::vector
.
#include <array>
...
std::array<int,5> numbers = {1,2,3};
std::array<int,5> values = {};
values = numbers;
Se, per qualche motivo, è necessario utilizzare array, allora sarà necessario copiare gli elementi attraverso un anello, o una funzione che utilizza un ciclo, come std::copy
#include <algorithm>
...
int numbers[5] = {1, 2, 3};
int values[5] = {};
std::copy(numbers, numbers + 5, values);
Come nota a margine, potresti aver notato una differenza nel modo in cui ho inizializzato l'array values
, fornendo semplicemente un elenco di inizializzazione vuoto. Sto facendo affidamento su una norma dello standard che dice che se si fornisce un elenco di inizializzazione per un aggregato, indipendentemente da quanto parziale, tutti gli elementi non specificati vengono inizializzati in valore. Per i tipi interi, l'inizializzazione del valore indica l'inizializzazione a zero. Quindi questi due sono esattamente equivalenti:
int values[5] = {0, 0, 0, 0, 0};
int values[5] = {};
fonte
2013-09-23 14:56:06
+1 per l'uso di std :: vector – Alex