C++ Primer笔记——unqiue、插入迭代器、流迭代器、insert返回值、关联容器的删与查

目录

一.P343 unique

二.P358 插入迭代器

三.P359 iostream迭代器

四.P384 检测insert的返回值(关联容器)

五.P386 删除元素(关联容器)

六.P387 map的下标操作


一.P343 unique

unqiue函数会将容器相邻的元素的重复项“删除”。

vector 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 v = { 1, 2, 3, 3, 3, 4, 4, 5 };
//unique之后:1 2 3 4 5 4 4 5
//返回:                ^

vector 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 it(cin), end;
vector v(it, end);//将键盘数据写入数组

vector构造函数内会调用迭代器++操作,对于istream迭代器而言,++操作与in >>同义

空的istream迭代器默认是尾后迭代器

 ostream_iterator:

ostream_iterator it(cout, " ");
vector v = { 1, 2, 3, 4, 5, 6 };
for (auto n : v)
	(*it)++ = n;//将vector输出到显示器

 ostream迭代器有两种构造:

 ostream_iterator out(os) out将T类型数据写入os
ostream_iterator out(os, d) out将T类型数据写入os,每次写入后输出一个d字符串

对于ostream迭代器而言,=操作与out <<同义

同时,解引用*和++操作可以忽略省去

ostream_iterator it(cout, " ");
vector 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 m;

常见场景
m[k] 查找k,没有时希望添加k。
m.at(k) 查找k,没有时希望抛异常(out_of_range)
m.find(k) 查找k,没有时不想改变map,也不想抛异常。


如有错误,敬请斧正

你可能感兴趣的:(C++,Primer笔记碎片,C++,Primer,unique,插入迭代器,iostream流迭代器,关联容器map的查找与删除)