ten C++ 11 kod działa dobrze dla mnie:Różnica między std :: vector i std :: array inicjatora wymienia
#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;
}
Drukuje sześć Spodziewane wartości.
Ale jeśli zmienię vector<str>
na array<str,3>
, gcc daje mi ten błąd: "zbyt wiele inicjalizatorów dla" std :: array "".
Jeśli zmienię inicjalizacji fields
tak:
array<str,3> fields {
str{1,2}, str{3,4}, str{5,6}
};
wszystko działa dobrze.
Więc dlaczego muszę str{1,2}
podczas korzystania std::array
, ale tylko {1,2}
podczas korzystania std::vector
?