结构向量的初始化

我想知道如何使用push_back方法将值添加到结构向量中

 struct subject { string name; int marks; int credits; }; vector<subject> sub; 

那么现在如何添加元素呢?

我有函数初始化string名称(主题名称)

 void setName(string s1, string s2, ...... string s6) { // how can i set name too sub[0].name= "english", sub[1].name = "math" etc sub[0].name = s1 // gives segmentation fault; so how do I use push_back method? sub.name.push_back(s1); sub.name.push_back(s2); sub.name.push_back(s3); sub.name.push_back(s4); sub.name.push_back(s6); } 

函数调用

 setName("english", "math", "physics" ... "economics"); 

创buildvector,push_back元素,然后修改它:

 struct subject { string name; int marks; int credits; }; int main() { vector<subject> sub; //Push back new subject created with default constructor. sub.push_back(subject()); //Vector now has 1 element @ index 0, so modify it. sub[0].name = "english"; //Add a new element if you want another: sub.push_back(subject()); //Modify its name and marks. sub[1].name = "math"; sub[1].marks = 90; } 

你不能用[#]访问一个向量,直到在该索引的向量中存在一个元素。 这个例子填充[#],然后修改它。

如果你想使用新的当前标准,你可以这样做:

 sub.emplace_back ("Math", 70, 0); 

要么

 sub.push_back ({"Math", 70, 0}); 

这些不需要默认构buildsubject

您不能通过下标访问空向量的元素。
std::vector上使用[]运算符时,总是检查向量是否为空且索引是否有效。
如果不存在元素, []不会添加元素,但如果索引无效,则会导致未定义的行为

你应该创build一个你的结构的临时对象,填充它,然后将其添加到vector,使用vector::push_back()

 subject subObj; subObj.name = s1; sub.push_back(subObj);