c++11之copy 和 copy_if 的用法

0.时刻提醒自己

Note: vector的释放

1.功能

复制 [first, last) 所定义的范围中的元素到始于 d_first 的另一范围.
区别: copy_if 带条件拷贝,而非全拷贝

2. 头文件与返回值

2.1 头文件

#include <numeric>

2.2 返回值
指向目标范围中最后复制元素的下个元素的输出迭代器

3. 异常

可能抛出异常

若算法无法分配内存,则抛出 std::bad_alloc 。

4.copy用法

4.1 代码

// 1. 构建一个原始数组
std::vector<int> src_vector(5);
// iota(起始,结束,从哪一个开始);
std::iota(src_vector.begin(), src_vector.end(), 10);

// 2. 将原始数组拷贝到目标数组
std::vector<int> dst_vector;

// 3. 执行拷贝
std::copy(src_vector.begin(), src_vector.end(), std::back_inserter(dst_vector));


// 4.遍历输出目标数组和原始数组
std::cout << "原始数组:\n";
std::for_each(src_vector.begin(), src_vector.end(), [](const int &item) {std::cout << "item = " << item << std::endl; });

std::cout << "目标数组:\n";
std::for_each(dst_vector.begin(), dst_vector.end(), [](const int &item) {std::cout << "item = " << item << std::endl; });

4.2 输出

5.copy_if用法

5.1 代码

// 1. 构建一个原始数组
std::vector<int> src_vector(5);
// iota(起始,结束,从哪一个开始);
std::iota(src_vector.begin(), src_vector.end(), 10);

// 2. 将原始数组拷贝到目标数组
std::vector<int> dst_vector(src_vector.size());

// 3. 将 src 拷贝到 dst,当时只拷贝大于13的元素。
auto it = std::copy_if(src_vector.begin(), src_vector.end(), dst_vector.begin(), [](const int item) {return item > 13; });
// 调整拷贝后的大小,为什么? 因为初始化时,指定了其大小
dst_vector.resize(std::distance(dst_vector.begin(), it));


// 4.遍历输出目标数组和原始数组
std::cout << "原始数组:\n";
std::for_each(src_vector.begin(), src_vector.end(), [](const int &item) {std::cout << "item = " << item << std::endl; });

std::cout << "目标数组:\n";
std::for_each(dst_vector.begin(), dst_vector.end(), [](const int &item) {std::cout << "item = " << item << std::endl; });

5.2 输出

posted @ 2020-10-21 21:30  mohist  阅读(5027)  评论(0编辑  收藏  举报