Вы также можете использовать агрегатную инициализацию из списка фигурной инициализации для подобных ситуаций.
#include <vector>
using namespace std;
struct subject {
string name;
int marks;
int credits;
};
int main() {
vector<subject> sub {
{"english", 10, 0},
{"math" , 20, 5}
};
}
Иногда, однако, члены структуры могут быть не такими простыми, поэтому вы должны предоставить компиляторурука в выводе его типов.
Таким образом, распространяясь на выше.
#include <vector>
using namespace std;
struct assessment {
int points;
int total;
float percentage;
};
struct subject {
string name;
int marks;
int credits;
vector<assessment> assessments;
};
int main() {
vector<subject> sub {
{"english", 10, 0, {
assessment{1,3,0.33f},
assessment{2,3,0.66f},
assessment{3,3,1.00f}
}},
{"math" , 20, 5, {
assessment{2,4,0.50f}
}}
};
}
Без assessment
в инициализаторе с фигурными скобками компилятор потерпит неудачу при попытке определить тип.
Выше было скомпилировано и протестировано с gcc в c ++ 17.Однако он должен работать с C ++ 11 и далее.В c ++ 20 мы можем увидеть синтаксис указателя, я надеюсь, что он позволит использовать следующий источник
{"english", 10, 0, .assessments{
{1,3,0.33f},
{2,3,0.66f},
{3,3,1.00f}
}},
: http://en.cppreference.com/w/cpp/language/aggregate_initialization