In this article we will discuss different ways to convert a vector into an array in C++.
Convert a vector into an array by copying items one by one
Suppose we have a vector of N integers and we want to create an array from it. For that first we need to create a n array of size N. Then we can iterate over all the elements of vector and copy them one by one into the array. For example,
#include<iostream> #include<vector> int main() { // Create a vector of integers std::vector<int> vec_of_num{1, 3, 4, 7, 8, 9}; // Create an array of size equivalent to vector int arr[vec_of_num.size()]; // Iterate over vector and copy elements to array for(int i = 0; i < vec_of_num.size(); i++) { arr[i] = vec_of_num[i]; } // Iterate over the array and print the contents for(auto x: arr) { std::cout<<x<<", "; } return 0; }
Output:
1, 3, 4, 7, 8, 9,
Convert a vector into an array using STL Algorithm copy()
Create an array of same size as the vector. Then pass the vector elements as range [start, end) to the copy() function as initial two argument and as the third argument pass the iterator pointing to the start of array. It will copy all the elements of vector into the array. For example,
#include<iostream> #include<vector> #include<algorithm> int main() { // Create a vector of integers std::vector<int> vec_of_num{1, 3, 4, 7, 8, 9}; // Create an array of size equivalent to vector int arr[vec_of_num.size()]; // Copy all elements of vector to array std::copy( vec_of_num.begin(), vec_of_num.end(), arr); // Iterate over the array and print the contents for(auto x: arr) { std::cout<<x<<", "; } return 0; }
Output:
Frequently Asked:
1, 3, 4, 7, 8, 9,
Convert a vector into an array using STL Algorithm transform()
STL algorithm transform() function accepts an input range, an output iterator and a unary function as arguments. It the then iterates over all the elements in input range and applies the unary function on each of them. Then gives the values returned by lambda function to the output iterator.
Basically it transforms the values in input range using callback function and stores them to the other container. Let’s use it to convert a vector into an array in C++,
#include<iostream> #include<vector> #include<algorithm> int main() { // Create a vector of integers std::vector<int> vec_of_num{1, 3, 4, 7, 8, 9}; // Create an array of size equivalent to vector int arr[vec_of_num.size()]; // Copy all elements of vector to array std::transform( vec_of_num.begin(), vec_of_num.end(), arr, [](const auto & elem){ return elem; }); // Iterate over the array and print the contents for(auto x: arr) { std::cout<<x<<", "; } return 0; }
Output
1, 3, 4, 7, 8, 9,
We created an array of same size as vector. Then we called the transform() function with following arguments,
- As the input range passed the vector elements
- As output iterator passed the iterator pointing to the start of an array.
- As the unary function we passed a lambda function which returns the copy of argument.
transform() function iterated over all the elements in vector and on each element it applied the lambda function and then copied the values returned by lambda function into the array.
Best Resources to Learn C++:
C++: Convert a vector into an array using vector::data()
Vector provides a function data(), which returns a pointer to the internal array of vector. For example,
int * refArr = vec_of_num.data();
But be careful, as it returns the internal array of vector. So any modification in it, will modify the values of vector too. For example,
#include<iostream> #include<vector> #include<algorithm> int main() { // Create a vector of integers std::vector<int> vec_of_num{1, 3, 4, 7, 8, 9}; int * refArr = vec_of_num.data(); int size = vec_of_num.size(); for(int i = 0; i < size; i++) { refArr[i] = refArr[i] + 10; std::cout<<refArr[i]<<", "; } std::cout<<std::endl; for(auto x: vec_of_num) { std::cout<<x<<", "; } return 0; }
Output:
11, 13, 14, 17, 18, 19, 11, 13, 14, 17, 18, 19,
Here we fetched the internal array of vector and add 10 to each value. It modified the values of vector too.
Summary
We learned about different ways to convert a vector into an array in C++.