std :: copy_n()函数的语法
std::copy_n(iterator source_first, size, iterator target_start);
关于第一和第三个参数,这里需要注意是用的iterator 。
关于第二个参数size,需要注意,这个iterator 所指向的容器的元素个数,比如这里是std::vector,std::array 等,这里需要调用的是size()这个接口,返回的是元素个数,而不是多少个Byte.
#include <iostream>
#include <algorithm>
#include <vector>
#include <array>
using namespace std;
void printLog(std::vector<int> vec)
{
//printing vector
cout << "v1: ";
for (int x : vec)
cout << x << " ";
cout << endl;
}
void printLog(std::array<int, 5> arr,int size)
{
//printing vector
cout << "arr: ";
for (int i = 0;i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
int main()
{
//declaring & initializing an int array
std::array<int, 5> arr = { 10, 20, 30, 40, 50 };
//vector declaration
vector<int> v1(5);
//copying 5 array elements to the vector
std::copy_n(arr.begin(), v1.size(), v1.begin());
// copy_n(arr.begin(), arr.size(), v1.begin()); // same above, size is 5
printLog(arr,arr.size());
printLog(v1);
return 0;
}
输出结果:
arr: 10 20 30 40 50
v1: 10 20 30 40 50
关于std::vector 这里需要注意,在执行拷贝的时候,要确认报std::vector 已经申请好足够的内存,正常调用push_back添加成员,是会动态申请内存的,vector 在没有初始化的情况下,size()的值是0,如果这时候直接向这个vector 对象拷贝数据会报错如下:
#include <iostream>
#include <algorithm>
#include <vector>
#include <array>
using namespace std;
void printLog(std::vector<int> vec)
{
//printing vector
cout << "v1: ";
for (int x : vec)
cout << x << " ";
cout << endl;
}
void printLog(std::array<int, 5> arr,int size)
{
//printing vector
cout << "arr: ";
for (int i = 0;i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
int main()
{
//declaring & initializing an int array
std::array<int, 5> arr = { 10, 20, 30, 40, 50 };
//vector declaration
vector<int> v1; // 这里没有初始化
//copying 5 array elements to the vector
std::copy_n(arr.begin(), arr.size(), v1.begin());
printLog(arr,arr.size());
printLog(v1);
return 0;
}
上面的代码没有对v1进行初始化,直接使用std::copy_n 拷贝数据,代码跑起来直接报错:
Segmentation fault
std::vector 的初始化方式有很多种,可以使用如下方式初始化:
std::vector<int> vec {};
std::vector<int> vec {0,1,4};
std::vector<int> vec(5);
std::vector<int> vec; vec.resize(5);
。。。
Reference: C++ std::copy_n()