An array is the collection of data belonging to a primitive data type. The data in this is kept in a continuous memory location. Vectors are dynamic arrays that can be resized to meet the needs. We can convert vectors to arrays in the following ways given below.
Example:
Input : Vector: [1, 2, 3, 4, 5]
Output: Array: [1, 2, 3, 4, 5]Input : Vector: [‘G’, ‘e’, ‘e’, ‘k’, ‘s’]
Output: Array: [‘G’, ‘e’, ‘e’, ‘k’, ‘s’]
Here, we will discuss the 5 ways to convert Vector to Array in C++ STL:
- Naive Approach to Convert Vector to Array
- Using copy() function in C++ STL
- Using transform() function in C++ STL
- Using data() function in C++ STL
- Using & operator in C++
1. Naive Approach to Convert Vector to Array
The vector can be converted to an array by first allocating the array’s memory sufficient to accommodate all vector elements. Then we run a for loop and copy every element of the vector to the array.
Example:
// C++ program to convert vector to // array using naive approach #include <bits/stdc++.h> using namespace std;
int main()
{ vector< int > v({ 1, 2, 3, 4, 5 });
int n = v.size();
// Printing original vector
cout<< "Vector: " ;
for ( int i: v) {
cout << i << ' ' ;
}
cout<<endl;
int arr[n];
for ( int i = 0; i < n; i++) {
arr[i] = v[i];
}
// Printing the array
cout<< "Array: " ;
for ( int i: arr) {
cout << i << ' ' ;
}
cout<<endl;
return 0;
} |
Vector: 1 2 3 4 5 Array: 1 2 3 4 5
Time Complexity: O(n)
Auxiliary Space: O(n)
2. Using copy() function in C++ STL
copy() function in C++ is used to copy a range of elements from one container to another. It takes 3 arguments which are a pointer to the beginning of the source container, a pointer to the end of the source container, and a pointer to the beginning of the destination container.
Example:
// C++ program to convert vector to // array using copy() function #include <bits/stdc++.h> using namespace std;
int main()
{ // Initialising the vector
vector< int > v({ 1, 2, 3, 4, 5 });
int n = v.size();
// Printing original vector
cout<< "Vector: " ;
for ( int i: v) {
cout << i << ' ' ;
}
cout<<endl;
// Initialising the array to
// store elements
int arr[n];
// Using copy() function
// to copy elements
copy(v.begin(),v.end(),arr);
// Printing the array
cout<< "Array: " ;
for ( int i: arr) {
cout << i << ' ' ;
}
cout<<endl;
return 0;
} |
Vector: 1 2 3 4 5 Array: 1 2 3 4 5
Time Complexity: O(n)
Auxiliary Space: O(n)
3. Using transform() function in C++ STL
transform() function in C++ is used to copy a range of elements from one container to another based upon a unary operation. It takes 4 parameters which include a pointer to the beginning of the source container, a pointer to the end of the source container, and a pointer to the beginning of the destination container, a unary operation.
Example:
// C++ program to convert vector to // array using transform() function #include <bits/stdc++.h> using namespace std;
int main()
{ // Initialising the vector
vector< int > v({ 1, 2, 3, 4, 5 });
int n = v.size();
// Printing original vector
cout<< "Vector: " ;
for ( int i: v) {
cout << i << ' ' ;
}
cout<<endl;
// Initialising the array to
// store elements
int arr[n];
// Using transform() function
// to copy elements
transform(v.begin(),v.end(),arr,[]( const int & x){ return x;});
// Printing the array
cout<< "Array: " ;
for ( int i: arr) {
cout << i << ' ' ;
}
cout<<endl;
return 0;
} |
Vector: 1 2 3 4 5 Array: 1 2 3 4 5
Time Complexity: O(n)
Auxiliary Space: O(n)
4. Using data() function in C++ STL
data() function in C++ returns a pointer to the first element in the array which is used internally by the vector. There are no parameters accepted by this function.
Example:
// C++ program to convert vector to // array using data() function #include <bits/stdc++.h> using namespace std;
int main()
{ // Initialising the vector
vector< int > v{ 1, 2, 3, 4, 5 };
int n = v.size();
// Printing original vector
cout << "Vector: " ;
for ( int i : v) {
cout << i << ' ' ;
}
cout << endl;
// memory pointer pointing to the
// first element of array
int * arr = v.data();
// Printing the array
cout << "Array: " ;
for ( int i = 0; i < n; i++) {
cout << arr[i] << " " ;
}
cout << endl;
return 0;
} |
Vector: 1 2 3 4 5 Array: 1 2 3 4 5
Time Complexity: O(n)
Auxiliary Space: O(1)
Note: Be aware that in case of STL SequenceContainers which can change their size at runtime, like std::vector, there is no guarantee that the memory location of the underlying array will stay same across container manipulations that change the containers size.
5. Using & operator in C++
When used on the first element of an STL SequenceContainer (std::vector, std::array…), the & operator returns a pointer to the first element of an internally used C-style array. That array can be accessed and modified directly.
Example:
// C++ program to convert vector to // array using transform() function #include <bits/stdc++.h> using namespace std;
int main()
{ // Initialising the vector
vector< int > v{ 1, 2, 3, 4, 5 };
int n = v.size();
// Printing original vector
cout<< "Vector: " ;
for ( int i: v) {
cout << i << ' ' ;
}
cout<<endl;
// returning the address
// of the first element
// of vector to array
int * arr = &v[0];
// Printing the array
cout<< "Array: " ;
for ( int i=0;i<n;i++)
{
cout<<arr[i]<< " " ;
}
cout<<endl;
return 0;
} |
Vector: 1 2 3 4 5 Array: 1 2 3 4 5
Time Complexity: O(n)
Auxiliary Space: O(1)