Search code examples
c++vectorstructpush-back

structure vector push_back C++


I'm having a problem figuring out how to use push_back function to push array elements of a structure into the TeamV vector.

Here is the code i have so far:

const int MEMBERS = 3;
const int TEAM_NUM = 4;

struct TeamS
{
   int ID_NUM;
   string team_members;
};


int main()
{
   int arrayS = 0;
   const int ID[TEAM_NUM] = { 123, 321, 456, 789 };
   const string TEAM [TEAM_NUM][MEMBERS] =
   {
      { "Sarah", "Joe", "John" }, 
      { "Chris", "Kevin", "James" }, 
      { "Tom", "Kim", "Emily" }, 
      { "Jill", "Jason", "Jim" }
   };
   vector <TeamS> TeamV;
   Initialize(TeamV, ID, TEAM, arrayS);

   return 0;
}



void Initialize(vector <TeamS> & TeamV, const int Id[], const string m[][MEMBERS], int arraysize)
{
   cout << "Starting initialization" << endl;
   for (arraysize; arraysize < TEAM_NUM; arraysize++)
   {
      TeamV.push_back(???)
         TeamV [arraysize].ID_NUM = Id[arraysize];
      TeamV [arraysize].team_members = m[arraysize][MEMBERS];

   }
   cout << "Ending initialization" << endl;
}

Thanks in advance.


Solution

    • First, you need to change TeamS to have a list of strings for team members, not just one string.

      struct TeamS
      {
         int ID_NUM;
         std::vector<string> team_members;
      };
      
    • In the function to initialize teamV:

      void Initialize(vector <TeamS> & TeamV, const int Id[], const string m[][MEMBERS], int arraysize)
      {
         cout << "Starting initialization" << endl;
         for (arraysize; arraysize < TEAM_NUM; arraysize++)
         {
            // Create an instance of TeamS and flesh out its contents.
            TeamS team;
            team.ID_NUM = Id[arraysize];
            for ( int i = 0; i < MEMBERS; ++i )
            {
               team.team_members.push_back(m[arraysize][i]);
            }
      
            // Now add the TeamS to TeamV.
            TeamV.push_back(team);
         }
         cout << "Ending initialization" << endl;
      }
      

      You can take a slightly different approach where you add an empty TeamS to TeamV and flesh out the contents of the member already in TeamV.

      void Initialize(vector <TeamS> & TeamV, const int Id[], const string m[][MEMBERS], int arraysize)
      {
         cout << "Starting initialization" << endl;
         for (arraysize; arraysize < TEAM_NUM; arraysize++)
         {
            // Add an tempy TeamS to TeamV.
            TeamS team;
            TeamV.push_back(team);
      
            // Flesh out its contents of the element in TeamV.
            TeamV[arraysize].ID_NUM = Id[arraysize];
            for ( int i = 0; i < MEMBERS; ++i )
            {
               TeamV[arraysize].team_members.push_back(m[arraysize][i]);
            }
         }
         cout << "Ending initialization" << endl;
      }