目录

一.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返回值、关联容器的删与查相关推荐

  1. ffmpeg学习笔记之创建音频解码器失败 avcodec_open2() 返回值为-22

    目录 前言 解决过程 总结分析 前言 由于项目需求,需要开发一个私有播放器,所以就无法使用ffmpeg通用的取流接口:avformat_open_input()(埋下祸根)其中遇上了一个坑在创建音频解 ...

  2. Java笔记-JNI中简单的参数与返回值处理

    目录 基本概念 代码及演示 基本概念 此篇博文记录了JNI的基本规范,与使用: https://blog.csdn.net/qq78442761/article/details/94849374 在本 ...

  3. java后端怎么返回音频流_Java语言中的IO流read()方法返回值为什么是int而不是byte?...

    下面是read方法的API public abstract int read()throws IOException Reads the next byte of data from the inpu ...

  4. C语言学习笔记---结构体作为函数参数和返回值

      结构体不仅可以作为函数的参数传递,也可以作为函数的返回值.现在就分别来看一下这两种情况. 结构体作为参数 struct score {int chinese;int math;int englis ...

  5. C++primer十万字笔记 第十一章 关联容器

     关联容器支持高效的关键字查找和访问,两个主要的关联容器是map和set.map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值表示与索引相关联的数据.set中每个元素只包含 ...

  6. 《C++ Primer 5th》笔记(11 / 19):关联容器

    文章目录 使用关联容器 使用map 使用set 关联容器概述 定义关联容器 初始化multimap 或 multiset 关键字类型的要求 有序容器的关键字类型 使用关键字类型的比较函数 pair类型 ...

  7. C++prime读书笔记(二)C++标准库:IO、容器、泛型算法、动态内存

    layout: post title: C++prime读书笔记(二)C++标准库:IO.容器.泛型算法.动态内存 description: C++prime读书笔记(二)C++标准库:IO.容器.泛 ...

  8. C++primer第十一章 关联容器 11.3关联容器操作 11.4 无序容器

    11.3关联容器操作 除了表9.2(第295页)中列出的类型,关联容器还定义了表11.3中列出的类型.这些类型表示容器关键字和值的类型. 对于set类型,key_type和value type是一样的 ...

  9. mybatis 添加语句返回对象_mybatis的insert语句插入数据时的返回值的实现

    mybatis的insert语句插入数据时的返回值的实现,语句,返回值,那条,都是,站长站 mybatis的insert语句插入数据时的返回值的实现 易采站长站,站长之家为您整理了mybatis的in ...

最新文章

  1. SpringBoot培训教程--史前文明之Spring简介
  2. Oracle认证成功获取方案
  3. ar编码matlab仿真_matlab-ofdm通信链路仿真
  4. ASP.NET专题研究——角色和Profile
  5. 【自动驾驶】11.百度Apollo对ROS的优化
  6. C、C++文件操作大全
  7. 搭建卷积神经网络怎么确定参数_AI入门:卷积神经网络
  8. PHP realpath() 函数
  9. Hibernate SessionFactory
  10. 程序员竟然钟爱这个!我 low了
  11. python中面向对象的缺点_面向对象中的多态在 Python 中是否没有什么意义?
  12. 学习——AQS工作原理分析
  13. 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性
  14. ODI Studio(问题5)ORA-12899:列的长度不相同
  15. 游戏打不开该怎么设置计算机,驱动人生游戏修复工具,轻松解决DNF打不开的问题。...
  16. android脚本,安卓好用的脚本程序—Gscript
  17. Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用...
  18. arcgis属性表中的某一字段保留1位小数
  19. Android P 图形显示系统(八) SurfaceFlinger合成流程(三)
  20. 如何设计一个混沌工程实验?

热门文章

  1. springCloud实现邮件发送
  2. 浅层介质过滤器(浅层砂过滤器)中的两位三通阀在过滤系统中的运行状态介绍
  3. 1024福利 | .NET社区联合清华大学出版社送好书来啦!
  4. 免费计算机管理软件,电脑行业管理软件免费版
  5. 【马列GISer】第八届全国大学生GIS应用技能大赛参考答案(上午)
  6. 中国跳棋游戏的设计与实现
  7. Linux 查看文件格式
  8. 奢侈品在华消费增速下降的原因
  9. 自动识别阿里云的滚动验证码
  10. Unable to initialize GTK: could not open display