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 输出
c++11之copy 和 copy_if 的用法的更多相关文章
- 做个地道的c++程序猿:copy and swap惯用法
如果你对外语感兴趣,那肯定听过"idiom"这个词.牛津词典对于它的解释叫惯用语,再精简一些可以叫"成语".想要掌握一门语言,其中的"成语" ...
- Ext.Net学习笔记11:Ext.Net GridPanel的用法
Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...
- C++11之for循环的新用法《转》
相关资料:https://legacy.gitbook.com/book/changkun/cpp1x-tutorial/details C++11之for循环的新用法 C++使用如下方法遍历一个容器 ...
- C++11之for循环的新用法
C++使用如下方法遍历一个容器: #include "stdafx.h" #include<iostream> #include<vector> int m ...
- C++11 std::copy
这个函数并不是简单的 while(first != last) { *result = *first; result++; first++; } 事实上这种写法是最具普适性的,值要求inputIter ...
- datatable中的copy和clone的用法区分
dt.copy();//复制结构和数据 dt.clone();//仅复制结构,不复制数据
- C++11智能指针 share_ptr,unique_ptr,weak_ptr用法
0x01 智能指针简介 所谓智能指针(smart pointer)就是智能/自动化的管理指针所指向的动态资源的释放.它是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动 ...
- C/C++ C++ 11 std::function和std::bind用法
std::bind() std::bind 主要用于绑定生成目标函数,一般用于生成的回调函数,cocos的回退函数都是通过std::bind和std::function实现的.两个点要明白: 1.绑定 ...
- 11、for和range的用法
// 27_range的使用 package main import ( "fmt" ) func main() { str := "abc" //通过for打 ...
随机推荐
- Nginx+uwsgi+django+vue部署项目
购买服务器 # 购买阿里云服务器 # 短期或是测试使用,创建 按量收费 服务器,可以随时删除,删除后不再计费,但要保证账户余额100元以上 连接服务器 1)账号 >: ssh root@39.9 ...
- ui自动化测试,页面方法的使用
悬浮下拉框 的设置选择 下拉框的选择 显性等待 双击, ActionChains类的方法行动链 提示框 双击,右击 双击用到行动连,提示框用到Alert的类 右击用到的也是行动连 UI自动化测试 #h ...
- 『学了就忘』Linux文件系统管理 — 67、通过命令模式进行LVM分区
目录 1.物理卷管理 (1)准备硬盘或者分区 (2)建立物理卷 (3)查看物理卷 (3)删除物理卷 2.创建卷组 (1)建立卷组 (2)查看卷组 (3)增加卷组容量 (4)减小卷组容量 (5)删除卷组 ...
- day03 部署NFS服务
day03 部署NFS服务 NFS的原理 1.什么是NFS 共享网络文件存储服务器 2.NFS的原理 1.用户访问NFS客户端,将请求转化为函数 2.NFS通过TCP/IP连接服务端 3.NFS服务端 ...
- Kafka(一)【概述、入门、架构原理】
目录 一.Kafka概述 1.1 定义 二.Kafka快速入门 2.1 安装部署 2.2 配置文件解析 2.3Kafka群起脚本 2.4 topic(增删改查) 2.5 生产和消费者命令行操作 三.K ...
- CentOS7 安装配置RocketMQ --主从模式(master-slave)异步复制
机器信息 192.168.119.129 主 192.168.119.128 从 配置host[两台机器] vim /etc/hosts 添加 192.168.119.129 rocketmq-nam ...
- 使用Rapidxml重建xml树
需求 : 重建一棵xml树, 在重建过程中对原来的标签进行一定的修改. 具体修改部分就不给出了, 这里只提供重建部分的代码 code : /****************************** ...
- Nginx流量拷贝
1. 需求 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: 可以验证功能是否正常,以及服务的性能: 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问: 这跟灰度发布还 ...
- Gradle入门及SpringBoot项目构建
https://blog.csdn.net/qq_27520051/article/details/90384483 一.介绍 Gradle 是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是 ...
- Output of C++ Program | Set 3
Predict the output of below C++ programs. Question 1 1 #include<iostream> 2 using namespace st ...