std::copy、std_copy_if、std::copy_n

std::copy、std::copy_if、std::copy_n

【1】应用示例程序

#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
int main()
{
auto printVector = [](const std::vector<int> & vec) {
int index = 0;
for (auto& item : vec)
{
std::cout << index++ << ": " << item << std::endl;
}
if (index != 0)
std::cout << std::endl;
};
// 所有测试数据集
std::vector<int> all = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
std::cout << "全部测试数据:" << std::endl;
printVector(all);
// 全拷贝
std::vector<int> dstVect;
std::copy(all.begin(), all.end(), std::back_inserter(dstVect));
std::cout << "拷贝全部测试数据:" << std::endl;
printVector(dstVect);
// 只拷贝偶数(即结果是偶数集)
std::vector<int> even;
std::copy_if(std::begin(all), std::end(all), std::back_inserter(even),
[&](auto item)->bool { return (std::fmod(item, 2) == 0); });
std::cout << "拷贝全部测试数据中所有偶数:" << std::endl;
printVector(even);
// 只拷贝前6个元素,使用std::back_inserter
std::vector<int> frontSix;
std::copy_n(std::begin(all), 6, std::back_inserter(frontSix));
std::cout << "拷贝全部测试数据中前6个数据:" << std::endl;
printVector(frontSix);
// 使用resize + std::begin
std::vector<int> backSix;
backSix.resize(6);
// 只拷贝后6个元素
std::cout << "拷贝全部测试数据中后6个数据:" << std::endl;
std::copy_n(std::rbegin(all), 6, backSix.begin());
printVector(backSix);
return 0;
}
/* run result:
全部测试数据:
0: 1
1: 2
2: 3
3: 4
4: 5
5: 6
6: 7
7: 8
8: 9
9: 10
10: 11
11: 12
拷贝全部测试数据:
0: 1
1: 2
2: 3
3: 4
4: 5
5: 6
6: 7
7: 8
8: 9
9: 10
10: 11
11: 12
拷贝全部测试数据中所有偶数:
0: 2
1: 4
2: 6
3: 8
4: 10
5: 12
拷贝全部测试数据中前6个数据:
0: 1
1: 2
2: 3
3: 4
4: 5
5: 6
拷贝全部测试数据中后6个数据:
0: 12
1: 11
2: 10
3: 9
4: 8
5: 7
*/
posted @   kaizenly  阅读(296)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
打赏

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示