1. ホーム
  2. c++

[解決済み] 構造体初期化ベクトル

2022-02-15 12:36:14

質問

構造体のベクトルに値を追加する方法を教えてください。 push_back メソッド

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


vector<subject> sub;

では次に、どのように要素を追加していけばいいのでしょうか。

文字列nameを初期化する関数(サブジェクト名)を用意しました。

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

解決方法は?

vectorを作成し、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;
}

ベクトルへのアクセスは、そのインデックスのベクトル内に要素が存在するまで、[#]付きではできません。この例では、[#]を入力し、その後に修正しています。