Open In App

C++ Vector of Structs

Last Updated : 29 Nov, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Prerequisites:

Structures are user-defined datatypes used to group various related variables into one single data type.  The structures can contain variables of different data types like int, string, boolean, etc. The variables are called the members of the structure. They become handy when we have to keep track of multiple variables while solving problems. 

Vector of structs can be used when there is a situation where we need to keep track of records in a data structure of different people with different characteristics. 

Syntax:

vector<struct_name> vector_name;

Methods to Insert Elements into the Vector

There are multiple methods to insert elements inside a vector of structures:

  • Using push_back()
  • Individual insertion
  • Using the Initializer list constructor
  • Using range constructor
  • Using custom constructor

1. Using push_back() Method

push_back() is used for inserting elements at the end position in a vector. We can use this method to insert structure into vector.

C++




// C++ Program to initialize
// vector of struct
// Using push_back()
#include <bits/stdc++.h>
 
using namespace std;
 
// Declaring a structure
struct Author {
    string author_name;
    int article_count;
    int article_views;
};
 
int main()
{
    // Declaring the vector of structs
    struct Author A[] = { { "Geek1", 124, 65000 },
                          { "Geek2", 156, 100000 },
                          { "Geek3", 10, 200 } };
    vector<Author> v;
 
    // Insertion of elements using push_back()
    for (int i = 0; i < sizeof(A) / sizeof(A[0]); i++) {
        v.push_back(A[i]);
    }
 
    cout << "author_name"
         << "    "
         << "article_count"
         << "    "
         << "article_views" << endl;
 
    for (auto& a : v) {
        cout << a.author_name << "             "
             << a.article_count << "          "
             << a.article_views << endl;
    }
 
    return 0;
}


Output

author_name    article_count    article_views
Geek1             124          65000
Geek2             156          100000
Geek3             10          200

2. Individual Insertion

Inserting every element individual element one by one rather than collective push_back() of structures.

C++




// C++ Program to initialize
// vector of struct
// Individual insertion
#include <bits/stdc++.h>
 
using namespace std;
 
// Declaring a structure
struct Author {
    string author_name;
    int article_count;
    int article_views;
};
 
int main()
{
    // Declaring the vector of structs
    struct Author a1 = { "Geek1", 124, 65000 };
    struct Author a2 = { "Geek2", 156, 100000 };
    struct Author a3 = { "Geek3", 10, 200 };
 
    vector<Author> v;
 
    // Insertion of elements using push_back()
    v.push_back(a1);
    v.push_back(a2);
    v.push_back(a3);
 
    cout << "author_name"
         << "    "
         << "article_count"
         << "    "
         << "article_views" << endl;
 
    for (auto& a : v) {
        cout << a.author_name << "             "
             << a.article_count << "          "
             << a.article_views << endl;
    }
 
    return 0;
}


Output

author_name    article_count    article_views
Geek1             124          65000
Geek2             156          100000
Geek3             10          200

3. Using the Initializer List Constructor

The initializer list constructor can be useful when we want elements to be inserted at initializing the vector.

C++




// C++ Program to initialize
// vector of struct
// Using the Initializer list constructor
#include <bits/stdc++.h>
using namespace std;
 
// Declaring a structure
struct Author {
    string author_name;
    int article_count;
    int article_views;
};
int main()
{
    // Declaring the vector of structs
    vector<Author> v = { { "Geek1", 124, 65000 },
                         { "Geek2", 156, 100000 },
                         { "Geek3", 10, 200 } };
 
    cout << "author_name"
         << "    "
         << "article_count"
         << "    "
         << "article_views" << endl;
 
    for (auto& a : v) {
        cout << a.author_name << "             "
             << a.article_count << "          "
             << a.article_views << endl;
    }
 
    return 0;
}


Output

author_name    article_count    article_views
Geek1             124          65000
Geek2             156          100000
Geek3             10          200

4. Using Range Constructor

Range constructor can be very helpful when we want to create a copy vector of the original vector.

C++




// C++ Program to initialize
// vector of struct
// Using range constructor
#include <bits/stdc++.h>
 
using namespace std;
 
// Declaring a structure
struct Author {
    string author_name;
    int article_count;
    int article_views;
};
 
int main()
{
    // Declaring the vector of structs
    vector<Author> v = { { "Geek1", 124, 65000 },
                         { "Geek2", 156, 100000 },
                         { "Geek3", 10, 200 } };
 
    // Initializing using range constructor
    vector<Author> nv(v.begin(), v.end());
    cout << "author_name"
         << "    "
         << "article_count"
         << "    "
         << "article_views" << endl;
 
    for (auto& a : v) {
        cout << a.author_name << "             "
             << a.article_count << "          "
             << a.article_views << endl;
    }
 
    return 0;
}


Output

author_name    article_count    article_views
Geek1             124          65000
Geek2             156          100000
Geek3             10          200

5. Using Custom Constructor

A custom constructor is used for conditions where we want some fixed value to be present after the initialization of a vector.

C++




// C++ Program to initialize
// vector of struct
// Using custom constructor
#include <bits/stdc++.h>
 
using namespace std;
 
// Declaring a structure
struct Author {
    string author_name;
    int article_count;
    int article_views;
};
 
int main()
{
    // Declaring the vector of structs
    vector<Author> v(3, { "Geek1", 124, 65000 });
 
    cout << "author_name"
         << "    "
         << "article_count"
         << "    "
         << "article_views" << endl;
 
    for (auto& a : v) {
        cout << a.author_name << "             "
             << a.article_count << "          "
             << a.article_views << endl;
    }
 
    return 0;
}


Output

author_name    article_count    article_views
Geek1             124          65000
Geek1             124          65000
Geek1             124          65000

Traversal of Vector

1. Using Index Traversal

If a vector of structs v is needed to be traversed using a loop where we traverse from index number 0 to v.size()-1. Let us check it with for loop.

Example:

C++




// C++ Program to illustrate
// Traversing of a vector
// Using index number
#include <bits/stdc++.h>
 
using namespace std;
 
// Declaring a structure
struct Author {
    string author_name;
    int article_count;
    int article_views;
};
int main()
{
    // Declaring the vector of structs
    vector<Author> v = { { "Geek1", 124, 65000 },
                         { "Geek2", 156, 100000 },
                         { "Geek3", 10, 200 } };
    cout << "author_name"
         << "    "
         << "article_count"
         << "    "
         << "article_views" << endl;
 
    // Traversing vector
    for (int i = 0; i < v.size(); i++) {
        cout << v[i].author_name << "             "
             << v[i].article_count << "            "
             << v[i].article_views << endl;
    }
 
    return 0;
}


Output

author_name    article_count    article_views
Geek1             124            65000
Geek2             156            100000
Geek3             10            200

2. Using auto to Traverse

If a vector of structs v is needed to be traversed using auto, here auto automatically treats the variable as the iterator which helps to iterate over the vector.

Example:

C++




// C++ Program to demonstrate
// traversing of a vector
// Using auto keyword
#include <bits/stdc++.h>
 
using namespace std;
 
// Declaring a structure
struct Author {
    string author_name;
    int article_count;
    int article_views;
};
 
int main()
{
    // Declaring the vector of structs
    vector<Author> v = { { "Geek1", 124, 65000 },
                         { "Geek2", 156, 100000 },
                         { "Geek3", 10, 200 } };
 
    cout << "author_name"
         << "    "
         << "article_count"
         << "    "
         << "article_views" << endl;
 
    // Traversing vector
    for (auto& a : v) {
        cout << a.author_name << "             "
             << a.article_count << "            "
             << a.article_views << endl;
    }
 
    return 0;
}


Output

author_name    article_count    article_views
Geek1             124            65000
Geek2             156            100000
Geek3             10            200


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads