Differenz zwischen std :: vector- und std :: array-Initialisierungslisten

Dieser C ++ 11-Code funktioniert einwandfrei für mich:

#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;
}

Es werden die sechs erwarteten Werte ausgegeben.

Aber wenn ich änderevector<str> zuarray<str,3>, gcc gibt mir folgende Fehlermeldung: "Zu viele Initialisierer für 'std :: array'".

Wenn ich die Initialisierung von @ ändefields also:

array<str,3> fields {
    str{1,2}, str{3,4}, str{5,6}
};

Things arbeiten nett.

So warum brauche ichstr{1,2} beim Benutzenstd::array, aber nur{1,2} beim Benutzenstd::vector?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage