# How to copy elements of an Array in a Vector in C++

• Difficulty Level : Easy
• Last Updated : 11 Oct, 2021

An Array is a collection of items stored at contiguous memory locations. The idea is to store multiple items of the same type together.

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

Vectors are the same as dynamic arrays with the ability to resize themselves automatically when an element is inserted or deleted, with their storage being handled automatically by the container.

Following are the different ways to copy elements from an array to a vector:

Method 1: Naive Solution
Traverse the complete array and insert each element into the newly assigned vector using the push_back() function. Below is the implementation of the above approach:

## C++

 `// C++ program of the above approach``#include ``using` `namespace` `std;`` ` `// Driver code``int` `main()``{``    ``// Initialise an array``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);`` ` `    ``// Initialize an empty vector``    ``vector<``int``> v;`` ` `    ``// Traverse the array and``    ``for` `(``int` `i = 0; i < N; i++)``        ``v.push_back(arr[i]);`` ` `    ``// Print all elements of vector``    ``for` `(``auto` `ele : v) {``        ``cout << ele << ``" "``;``    ``}`` ` `    ``return` `0;``}`
Output
`1 2 3 4 5 `

Method 2: Range-based Assignment during Initialization
In C++, the Vector class provides a constructor which accepts a range, so to create a vector from array elements, pass the pointer to the first and last position of the range as the argument during the vector initialization that needs to be copied to the vector i.e, (arr, arr+N).

Below is the implementation of the above approach:

## C++

 `// C++ program of the above approach``#include ``using` `namespace` `std;`` ` `// Driver code``int` `main()``{``    ``// Initialise an array``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);`` ` `    ``// Initialize a vector by passing the``    ``// pointer to the first and last element``    ``// of the range as arguments``    ``vector<``int``> v(arr, arr + N);`` ` `    ``// Print all elements of vector``    ``for` `(``auto` `ele : v) {``        ``cout << ele << ``" "``;``    ``}`` ` `    ``return` `0;``}`
Output
`1 2 3 4 5 `

Note that Iterators used to point at the memory addresses of STL containers can also be used.

• std::begin(arr)- Iterator to the first element of an array.
• std::end(arr)- Iterator to the one after the last element of an array.

vector<int> v(begin(arr), end(arr));

Method 3: Using Inbuilt Function Insert(position, first_iterator, last_iterator): The insert() is a built-in function in C++ STL that inserts new elements before the element at the specified position, effectively increasing the container size by the number of elements inserted. Instead of a single value, a range can also be passed as arguments.

Below is the implementation of the above approach:

## C++

 `// C++ program of the above approach``#include ``using` `namespace` `std;`` ` `// Driver code``int` `main()``{``    ``// Initialise an array``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);`` ` `    ``// Initialize an empty vector``    ``vector<``int``> v;`` ` `    ``// Add array elements in the required``    ``// range into a vector from beginning``    ``v.insert(v.begin(), arr, arr + N);`` ` `    ``// Print all elements of vector``    ``for` `(``auto` `ele : v) {``        ``cout << ele << ``" "``;``    ``}`` ` `    ``return` `0;``}`
Output
`4 6 8 10 12 `

Method 4: Using Inbuilt Function Copy(first_iterator, last_iterator, back_inserter()): This is another way to copy array elements into a vector is to use the inbuilt copy function. This function takes 3 arguments, an iterator to the first element of the array, an iterator to the last element of the array, and the back_inserter function to insert values from the back.

Below is the implementation of the above approach:

## C++

 `// C++ program of the above approach``#include ``using` `namespace` `std;`` ` `// Driver code``int` `main()``{``    ``// Initialise an array``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);`` ` `    ``// Initialize an empty vector``    ``vector<``int``> v;`` ` `    ``// Copy array elements in the required``    ``// range into vector v using copy function``    ``copy(begin(arr), end(arr), back_inserter(v));`` ` `    ``// Print all elements of vector``    ``for` `(``auto` `ele : v) {``        ``cout << ele << ``" "``;``    ``}`` ` `    ``return` `0;``}`
Output
`1 2 3 4 5 `

Method 5: Using Inbuilt Function Assign( first_iterator, last_iterator ): The vector::assign() function can be used to assign values to a new vector or an already existing vector. It can also modify the size of the vector if necessary. It takes the iterator to the first and last position as arguments.

Below is the implementation of the above approach:

## C++

 `// C++ program of the above approach``#include ``using` `namespace` `std;`` ` `// Driver code``int` `main()``{``    ``// Initialise an array``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);`` ` `    ``// Initialize an empty vector``    ``vector<``int``> v;`` ` `    ``// Assign the elements of the array``    ``// into the vector v``    ``v.assign(arr, arr + N);`` ` `    ``// Print all elements of vector``    ``for` `(``auto` `ele : v) {``        ``cout << ele << ``" "``;``    ``}`` ` `    ``return` `0;``}`
Output
`1 2 3 4 5 `

Method 6: Using Inbuilt Function Transform(first_iterator, last_iterator, back_insert(), function): The std::transform() function takes 4 arguments, an iterator to the first element of the array, an iterator to the last element of the array, the back_inserter function to insert values from the back and a user-defined function which can be used to modify all the elements of the array i.e, perform a unary operation, convert lower case characters to upper case, etc.

Below is the implementation of the above approach:

## C++14

 `// C++ program of the above approach``#include ``using` `namespace` `std;`` ` `// Function to increment the value by 1``int` `increment(``int` `x)``{``    ``return` `x + 1;``}`` ` `// Driver code``int` `main()``{``    ``// Initialise an array``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);`` ` `    ``// Initialize an empty vector``    ``vector<``int``> v;`` ` `    ``// Copy the elements of the array into``    ``// vector v and increment each value``    ``transform(arr, arr + N, back_inserter(v), increment);`` ` `    ``// Print all elements of vector``    ``for` `(``auto` `ele : v) {``        ``cout << ele << ``" "``;``    ``}`` ` `    ``return` `0;``}`
Output
`2 3 4 5 6 `

My Personal Notes arrow_drop_up