C++ Vector of Structs
Last Updated :
29 Nov, 2022
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++
#include <bits/stdc++.h>
using namespace std;
struct Author {
string author_name;
int article_count;
int article_views;
};
int main()
{
struct Author A[] = { { "Geek1" , 124, 65000 },
{ "Geek2" , 156, 100000 },
{ "Geek3" , 10, 200 } };
vector<Author> v;
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++
#include <bits/stdc++.h>
using namespace std;
struct Author {
string author_name;
int article_count;
int article_views;
};
int main()
{
struct Author a1 = { "Geek1" , 124, 65000 };
struct Author a2 = { "Geek2" , 156, 100000 };
struct Author a3 = { "Geek3" , 10, 200 };
vector<Author> v;
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++
#include <bits/stdc++.h>
using namespace std;
struct Author {
string author_name;
int article_count;
int article_views;
};
int main()
{
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++
#include <bits/stdc++.h>
using namespace std;
struct Author {
string author_name;
int article_count;
int article_views;
};
int main()
{
vector<Author> v = { { "Geek1" , 124, 65000 },
{ "Geek2" , 156, 100000 },
{ "Geek3" , 10, 200 } };
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++
#include <bits/stdc++.h>
using namespace std;
struct Author {
string author_name;
int article_count;
int article_views;
};
int main()
{
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++
#include <bits/stdc++.h>
using namespace std;
struct Author {
string author_name;
int article_count;
int article_views;
};
int main()
{
vector<Author> v = { { "Geek1" , 124, 65000 },
{ "Geek2" , 156, 100000 },
{ "Geek3" , 10, 200 } };
cout << "author_name"
<< " "
<< "article_count"
<< " "
<< "article_views" << endl;
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++
#include <bits/stdc++.h>
using namespace std;
struct Author {
string author_name;
int article_count;
int article_views;
};
int main()
{
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
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...