5 Different ways to Initialize a vector in c++

In this article we will discuss different ways to initialize a vector in C++.

Creating a vector object without any initialization will create an empty vector with no elements i.e.

std::vector<int> vecOfInts;

But we generally want to initialize a vector with huge values and calling push_back() that many times to add element in vector is not an efficient and intelligent solution. So, let’s discuss how to initialize a vector in different ways,

Initializing a vector with default value of elements

Vector provides a constructor that accepts the size as an argument and initialize the vector with that many objects of default value i.e.

// Initialize vector with 5 integers
// Default value of all 5 ints will be 0.
std::vector<int> vecOfInts(5);

for(int x : vecOfInts)
	std::cout<<x<<std::endl;

Output:
0
0
0
0
0

Initialize a vector by filling similar copy of an element

Many times we want to initialize a vector with an element of particular value instead of default value. For that vector provides an overloaded constructor i.e.

vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());

It accepts the size of vector and an element as an argument. Then it initializes the vector with n elements of value val.

Advertisements

Lets see an example that how to initialize a vector of std::string to 5 string objects with value “Hi”.

// Initialize vector to 5 string objects with value "Hi"
std::vector<std::string> vecOfStr(5, "Hi");

for(std::string str : vecOfStr)
	std::cout<<str<<std::endl;

 Output:
Hi
Hi
Hi
Hi
Hi

Initialize a vector with an array

In above two examples we saw how to initialize a vector with same kind of value either default value or a particular value. But what if we want to initialize a vector with an array of elements. For that vector provides an over loaded constructor i.e.

vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());

It accepts a range as an argument i.e. two iterators and initializes the vector with elements in range (first, last] i.e. from first till last -1.

[showads ad=inside_post]

We will use the same overloaded constructor to initialize a vector of string from an array of strings i.e.

// Create an array of string objects
std::string arr[] = {"first", "sec", "third", "fourth"};

// Initialize vector with a string array
std::vector<std::string> vecOfStr(arr, arr + sizeof(arr)/sizeof(std::string));

for(std::string str : vecOfStr)
	std::cout<<str<<std::endl;

Output:
first
sec
third
fourth

Initialize a vector with std::list

We will use the same overloaded constructor of std::vector to initialize a vector with range i.e.

vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());

This time range will be of std::list’s iterator i.e.
// Create an std::list of 5 string objects
std::list<std::string> listOfStr;
listOfStr.push_back("first");
listOfStr.push_back("sec");
listOfStr.push_back("third");
listOfStr.push_back("fouth");

// Initialize a vector with std::list
std::vector<std::string> vecOfStr(listOfStr.begin(), listOfStr.end());

for(std::string str : vecOfStr)
		std::cout<<str<<std::endl;

Output:
first
sec
third
fourth

Initializing a vector with an other vector

Vector provides a constructor that receives other vector as an argument and initializes the current vector with the copy of all elements of provided vector i.e.

vector (const vector& x);

Lets how to initialize a vector of string with another vector of same type i.e.
std::vector<std::string> vecOfStr;
vecOfStr.push_back("first");
vecOfStr.push_back("sec");
vecOfStr.push_back("third");

// Initialize a vector with other string object
std::vector<std::string> vecOfStr3(vecOfStr);

Complete code with all 5 different ways to initialize a vector is as follows,
#include <iostream>
#include <vector>
#include <iterator>
#include <list>
#include <string>

void example1() {
// Initialize vector with 5 integers
// Default value of all 5 ints will be 0.
	std::vector<int> vecOfInts(5);

	for (int x : vecOfInts)
		std::cout << x << std::endl;

}

void example2() {
// Initialize vector to 5 string objects with value "Hi"
	std::vector<std::string> vecOfStr(5, "Hi");

	for (std::string str : vecOfStr)
		std::cout << str << std::endl;

}

void example3() {
// Create an array of string objects
	std::string arr[] = { "first", "sec", "third", "fourth" };

// Initialize vector with a string array
	std::vector<std::string> vecOfStr(arr,
			arr + sizeof(arr) / sizeof(std::string));

	for (std::string str : vecOfStr)
		std::cout << str << std::endl;

}

void example4() {
// Create an std::list of 5 string objects
	std::list<std::string> listOfStr;
	listOfStr.push_back("first");
	listOfStr.push_back("sec");
	listOfStr.push_back("third");
	listOfStr.push_back("fouth");

// Initialize a vector with std::list
	std::vector<std::string> vecOfStr(listOfStr.begin(), listOfStr.end());

	for (std::string str : vecOfStr)
		std::cout << str << std::endl;

// Initialize a vector with other string object
	std::vector<std::string> vecOfStr3(vecOfStr);

	for (std::string str : vecOfStr3)
		std::cout << str << std::endl;

}

int main() {

	example1();
	example2();
	example3();
	example4();
	return 0;
}

 

Do you want to Learn Modern C++ from best?

We have curated a list of Best C++ Courses, that will teach you the cutting edge Modern C++ from the absolute beginning to advanced level. It will also introduce to you the word of Smart Pointers, Move semantics, Rvalue, Lambda function, auto, Variadic template, range based for loops, Multi-threading and many other latest features of C++ i.e. from C++11 to C++20.

Check Detailed Reviews of Best Modern C++ Courses

Remember, C++ requires a lot of patience, persistence, and practice. So, start learning today.

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top