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 输出
c++11之copy 和 copy_if 的用法

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 输出
c++11之copy 和 copy_if 的用法

原文链接: https://www.cnblogs.com/pandamohist/p/13854881.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++11之copy 和 copy_if 的用法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/204211

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午9:47
下一篇 2023年2月12日 下午9:47

相关推荐