结构初始化向量

新手上路,请多包涵

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

struct subject
{
  string name;
  int marks;
  int credits;
};

vector<subject> sub;

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

我有初始化字符串名称的函数(主题名称)

 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");

原文由 SRN 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 506
2 个回答

创建向量 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;
}

在该索引处的向量中存在元素之前,您无法使用 [#] 访问向量。此示例填充 [#],然后对其进行修改。

原文由 John Humphreys 发布,翻译遵循 CC BY-SA 3.0 许可协议

您不能通过下标访问空向量的元素。

在 --- 上使用 std::vector [] 运算符时,请始终检查向量是否为空且索引是否有效。

[] 如果不存在元素,则不添加元素,但如果索引无效,则会导致 未定义行为

您应该使用 vector::push_back() 创建结构的临时对象,将其填充,然后将其添加到向量中

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

原文由 Alok Save 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题