Questa C++ 11 codice funziona bene per me:Differenza tra std :: vector e std :: array di inizializzazione elenca
#include <iostream>
#include <vector>
#include <array>
using namespace std;
struct str {
int first, last;
};
vector<str> fields {
{1,2}, {3,4}, {5,6}
};
int main()
{
for (str s : fields)
cout << s.first << " " << s.last << endl;
}
esso stampa i sei valori attesi.
Ma se cambio vector<str>
a array<str,3>
, gcc mi dà questo errore: "troppi inizializzatori per 'std :: array'".
Se cambio l'inizializzazione di fields
così:
array<str,3> fields {
str{1,2}, str{3,4}, str{5,6}
};
Le cose funzionano bene.
Allora, perché ho bisogno str{1,2}
quando si utilizza std::array
, ma solo quando si utilizza {1,2}
std::vector
?