C++ Primer笔记——unqiue、插入迭代器、流迭代器、insert返回值、关联容器的删与查
目录
一.P343 unique
二.P358 插入迭代器
三.P359 iostream迭代器
四.P384 检测insert的返回值(关联容器)
五.P386 删除元素(关联容器)
六.P387 map的下标操作
一.P343 unique
unqiue函数会将容器相邻的元素的重复项“删除”。
vector<int> v = { 1, 2, 3, 3, 3, 4, 4, 5 };
unique(v.begin(), v.end());
for (auto n : v) cout << n << " ";
//结果:
1 2 3 4 5 4 4 5
这里需要注意几点:
1.只会将容器内相邻元素重复项删除,使用前请确保同样元素相邻
如果内部这样存储:1,2,2,3,2,4,3,5
那么得到的将是:1,2,3,2,4,3,5,5
2.参数范围是左闭右开,右边参数是最后一个参与unique的下一个参数。
3.返回值是最后一个不重复元素的下一个位置。
vector<int> v = { 1, 2, 3, 3, 3, 4, 4, 5 };
//unique之后:1 2 3 4 5 4 4 5
//返回: ^vector<int> v = { 1, 2, 2, 3, 2, 4, 3, 5 };
//unique之后:1 2 3 2 4 3 5 5
//返回: ^
二.P358 插入迭代器
这是一种容器适配器,接受一个容器作为参数,返回一个迭代器。
有三种类型:
类型 | 含义 | 使用 |
---|---|---|
back_inserter(v) | 相当于v.push_back |
auto i = back_inserter(v); i = val; // == v.push_back(val); |
front_inserter(v) | 相当于v.push_front |
auto i = front_inserter(v); i = val; // == v.push_front(val); |
inserter(v, p) | 相当于v.insert,在p迭代器前插入元素 |
auto i = inserter(v, v.end()); i = val; // == v.insert(v.end(), val); |
三.P359 iostream迭代器
istream_iterator:
istream_iterator<int> it(cin), end;
vector<int> v(it, end);//将键盘数据写入数组
vector构造函数内会调用迭代器++操作,对于istream迭代器而言,++操作与in >>同义。
空的istream迭代器默认是尾后迭代器。
ostream_iterator:
ostream_iterator<int> it(cout, " ");
vector<int> v = { 1, 2, 3, 4, 5, 6 };
for (auto n : v)(*it)++ = n;//将vector输出到显示器
ostream迭代器有两种构造:
ostream_iterator<T> out(os) | out将T类型数据写入os |
ostream_iterator<T> out(os, d) | out将T类型数据写入os,每次写入后输出一个d字符串 |
对于ostream迭代器而言,=操作与out <<同义。
同时,解引用*和++操作可以忽略省去。
ostream_iterator<int> it(cout, " ");
vector<int> v = { 1, 2, 3, 4, 5, 6 };
for (auto n : v)it = n;
四.P384 检测insert的返回值(关联容器)
不重复型关联容器的insert会返回一个pair类型对象,first成员是容器迭代器,second成员是bool类型。
插入成功,first是该元素迭代器,second是true。
插入失败,first是该已存在的元素的迭代器,second是false。
五.P386 删除元素(关联容器)
map的erase有三种参数类型,返回值也分别不同。
形式 | 返回值 |
---|---|
erase(val) //删除关键字为val的元素 | 删除的元素数量 |
erase(iterator) //删除指定迭代器的元素 | iterator的下一个迭代器 |
erase(iterator_first, iterator_second) //删除指定迭代器范围内的元素,范围:[first, second) | iterator_second |
六.P387 map的下标操作
对map进行查找操作,需要看使用场景选择不同方式。
查找方式 map<K, V> m; |
常见场景 |
---|---|
m[k] | 查找k,没有时希望添加k。 |
m.at(k) | 查找k,没有时希望抛异常(out_of_range) |
m.find(k) | 查找k,没有时不想改变map,也不想抛异常。 |
如有错误,敬请斧正
C++ Primer笔记——unqiue、插入迭代器、流迭代器、insert返回值、关联容器的删与查相关推荐
- ffmpeg学习笔记之创建音频解码器失败 avcodec_open2() 返回值为-22
目录 前言 解决过程 总结分析 前言 由于项目需求,需要开发一个私有播放器,所以就无法使用ffmpeg通用的取流接口:avformat_open_input()(埋下祸根)其中遇上了一个坑在创建音频解 ...
- Java笔记-JNI中简单的参数与返回值处理
目录 基本概念 代码及演示 基本概念 此篇博文记录了JNI的基本规范,与使用: https://blog.csdn.net/qq78442761/article/details/94849374 在本 ...
- java后端怎么返回音频流_Java语言中的IO流read()方法返回值为什么是int而不是byte?...
下面是read方法的API public abstract int read()throws IOException Reads the next byte of data from the inpu ...
- C语言学习笔记---结构体作为函数参数和返回值
结构体不仅可以作为函数的参数传递,也可以作为函数的返回值.现在就分别来看一下这两种情况. 结构体作为参数 struct score {int chinese;int math;int englis ...
- C++primer十万字笔记 第十一章 关联容器
关联容器支持高效的关键字查找和访问,两个主要的关联容器是map和set.map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值表示与索引相关联的数据.set中每个元素只包含 ...
- 《C++ Primer 5th》笔记(11 / 19):关联容器
文章目录 使用关联容器 使用map 使用set 关联容器概述 定义关联容器 初始化multimap 或 multiset 关键字类型的要求 有序容器的关键字类型 使用关键字类型的比较函数 pair类型 ...
- C++prime读书笔记(二)C++标准库:IO、容器、泛型算法、动态内存
layout: post title: C++prime读书笔记(二)C++标准库:IO.容器.泛型算法.动态内存 description: C++prime读书笔记(二)C++标准库:IO.容器.泛 ...
- C++primer第十一章 关联容器 11.3关联容器操作 11.4 无序容器
11.3关联容器操作 除了表9.2(第295页)中列出的类型,关联容器还定义了表11.3中列出的类型.这些类型表示容器关键字和值的类型. 对于set类型,key_type和value type是一样的 ...
- mybatis 添加语句返回对象_mybatis的insert语句插入数据时的返回值的实现
mybatis的insert语句插入数据时的返回值的实现,语句,返回值,那条,都是,站长站 mybatis的insert语句插入数据时的返回值的实现 易采站长站,站长之家为您整理了mybatis的in ...
最新文章
- SpringBoot培训教程--史前文明之Spring简介
- Oracle认证成功获取方案
- ar编码matlab仿真_matlab-ofdm通信链路仿真
- ASP.NET专题研究——角色和Profile
- 【自动驾驶】11.百度Apollo对ROS的优化
- C、C++文件操作大全
- 搭建卷积神经网络怎么确定参数_AI入门:卷积神经网络
- PHP realpath() 函数
- Hibernate SessionFactory
- 程序员竟然钟爱这个!我 low了
- python中面向对象的缺点_面向对象中的多态在 Python 中是否没有什么意义?
- 学习——AQS工作原理分析
- 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性
- ODI Studio(问题5)ORA-12899:列的长度不相同
- 游戏打不开该怎么设置计算机,驱动人生游戏修复工具,轻松解决DNF打不开的问题。...
- android脚本,安卓好用的脚本程序—Gscript
- Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用...
- arcgis属性表中的某一字段保留1位小数
- Android P 图形显示系统(八) SurfaceFlinger合成流程(三)
- 如何设计一个混沌工程实验?