如何将数组中的元素复制到C++向量中
数组 是一组存储在连续内存位置的项目。思路是将同类型的多个项目一起存储。
向量 与 动态数组 相同,具有自动调整大小的能力,在插入或删除元素时自动处理它们的存储的容器。
以下是从数组复制元素到向量的不同方式:
方法1: 幼稚的解决方案
遍历整个数组并使用push_back()函数将每个元素插入新分配的向量中。
// 以上方法的C++程序
#include <bits/stdc++.h>
using namespace std;
// 驱动程序
int main()
{
// 初始化数组
int arr [] = {1、2、3、4、5};
int N = sizeof(arr) / sizeof(arr[0]);
// 初始化一个空向量
vector<int> v;
// 遍历数组并
for (int i = 0; i < N; i++)
v.push_back(arr [i]);
// 打印向量的所有元素
for (auto ele:v){
cout << ele <<“”;
}
return 0;
}
输出:
1 2 3 4 5
方法2:初始化期间的基于范围的赋值
在C ++中,Vector类提供了接受范围的构造函数,因此要从数组元素创建向量,请在要复制到向量i.e的向量初始化期间将范围的第一个和最后一个位置的指针作为参数传递(arr,arr + N)。
// 以上方法的C++程序
#include <bits/stdc++.h>
using namespace std;
// 驱动程序
int main()
{
// 初始化数组
int arr [] = {1、2、3、4、5};
int N = sizeof(arr) / sizeof(arr[0]);
// 初始化一个向量,通过传递
// 指向范围第一个和最后一个元素的指针
// 作为参数
vector<int> v(arr,arr + N);
// 打印向量的所有元素
for (auto ele:v){
cout << ele <<“”;
}
return 0;
}
输出:
1 2 3 4 5
注意,用于指向STL容器的内存地址的迭代器也可以使用。
- std::begin(arr) – 指向数组第一个元素的迭代器。
std::end(arr)- 指向数组最后一个元素之后的迭代器。
vector<int> v(begin(arr),end(arr));
方法3:使用内置函数insert(position、first_iterator、last_iterator): insert()是C ++ STL中的内置函数,它在指定位置的元素之前插入新元素,有效地通过插入的元素数量增加容器的大小。可以传递范围作为参数,而不是单个值。
以下是上述方法的实现:
// C++ program of the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to add 10 to each element x
int add_ten(int x)
{
return (x + 10);
}
// 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 and add 10 to each element
transform(arr, arr + N, back_inserter(v), add_ten);
// Print all elements of vector
for (auto ele : v) {
cout << ele << " ";
}
return 0;
}
输出
11 12 13 14 15
// 上述方法的C++程序
#include <bits/stdc++.h>
using namespace std;
// 函数,将值加1
int increment(int x)
{
return x + 1;
}
// 主函数
int main()
{
// 初始化一个数组
int arr[] = { 1, 2, 3, 4, 5 };
int N = sizeof(arr) / sizeof(arr[0]);
// 初始化一个空向量
vector<int> v;
// 将数组中的元素复制到向量v,并增加每个值
transform(arr, arr + N, back_inserter(v), increment);
// 输出向量中的所有元素
for (auto ele : v) {
cout << ele << " ";
}
return 0;
}
输出
2 3 4 5 6