结构向量的初始化
我想知道如何使用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);