Diferencia entre las listas de inicializadores std :: vector y std :: array
Este código C ++ 11 funciona bien para mí:
#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;
}
Imprime los seis valores esperados.
Pero si cambiovector<str>
aarray<str,3>
, gcc me da este error: "demasiados inicializadores para 'std :: array'".
Si cambio la inicialización defields
así:
array<str,3> fields {
str{1,2}, str{3,4}, str{5,6}
};
Las cosas funcionan bien.
Entonces, ¿por qué necesitostr{1,2}
cuando usasstd::array
, pero sólo{1,2}
cuando usasstd::vector
?