(转载)C++迭代器之'插入迭代器

1. 定义

插入型迭代器(Insert Iterator),又叫插入器(Inserter)。

2. 作用

插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作。
算法库对所有在容器上的操作有约束:决不修改容器的大小(不插入、不删除)。有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一统带,即保持了设计上的一致性。

3. 类型

3.1 尾部插入器(back_insert_iterator)
使用:通过调用容器的push_back()成员函数来插入元素
功能:在容器的尾端插入元素
限制:只有提供了push_back()成员函数的容器中
适用:vector deque list

3.2 头部插入器(front_insert_iterator)
使用:通过调用容器的push_front()成员函数来插入元素
功能:在容器的前端插入元素
限制:只有提供了push_front()成员函数的容器中
适用:deque list

3.3 普通插入器(insert_iterator)
使用:通过调用insert()成员函数来插入元素,并由用户指定插入位置
功能:在容器的指定位置插入元素
限制:STL容器都提供了insert()函数.
适用:提供了insert()函数的STL容器

例子:

 1 #include <iostream>
 2 #include <vector>
 3 #include <list>
 4 #include <iterator>
 5 #include <queue>
 6 #include <set>
 7 using namespace std;
 8
 9 int main()
10 {
11     vector<int> V;
12     list<int> L;
13
14     for(int i = 0; i < 10; ++i)
15         V.push_back(i %5);
16
17
18 //back_inserter
19     copy(V.begin(), V.end(), back_inserter(L));
20
21     list<int>:: iterator it;
22     for(it = L.begin(); it != L.end(); it++)
23     {
24         cout <<*it<<" ";
25     }
26     cout << endl;
27
28 //    front_inserter
29     deque<int> dq;
30     copy(V.begin(), V.end(), front_inserter(dq));
31
32     deque<int>:: iterator it1;
33     for(it1 = dq.begin(); it1 != dq.end(); it1++)
34     {
35         cout <<*it1<<" ";
36     }
37     cout << endl;
38 //     insert_iterator
39     set<int> s;
40     copy(L.begin(), L.end(), inserter(s, s.begin()));
41     set<int>::iterator it2;
42     for(it2 = s.begin(); it2 != s.end(); it2 ++)
43     {
44         cout<<*it2<<" ";
45     }
46
47     return 0;
48 }

(转载)C++迭代器之'插入迭代器

时间: 2024-10-15 12:09:12

(转载)C++迭代器之'插入迭代器的相关文章

Python 迭代器协议以及可迭代对象、迭代器对象

一.迭代器协议定义: 迭代:是一个重复的过程,每一次重复,都是基于上一次的结果而来 while True: #单纯的重复 print('你瞅啥') l=['a','b','c','d'] count=0 while count < len(l): print(l[count]) count+=1 迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 二.可迭代对象定义: 实现了迭代器协议

C ++ 插入迭代器

C++ 语言提供了三种插入器,其差别在于插入元素的位置不同. (1)back_inserter,创建一个使用push_back 实现插入的迭代器. (2)front_inserter,创建一个使用push_front实现的插入迭代器. (3)inserter,使用insert实现的插入,此外还带有第二个实参:指向插入起始位置的迭代器. back_inserter 是一种迭代器适配器,它与容器适配器一样,是以一个容器对象作为实参,生成一个适应期实参行为的迭代器.举例说明其用法. 1 vector<

Python中的可迭代对象与迭代器对象

刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 1.迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于依次访问可迭代对象(容器)内元素的操作(?). 2.迭代器对象:具有__next__()方法的对象.该方法能够自动返回下一个结果,当到达序列结尾时,引发StopIteration异常. 3.可迭代对象:具有__iter__()方法的对象.该方法可获取其迭代器对象. 2.迭代过程(以for循环为例) for循环开

反转迭代器和插入迭代器的区别

反转迭代器顾名思义,反向操作容器,而插入迭代器是将迭代器的赋值操作转换为push_back(),push_front(),insert()操作.插入迭代器要求容器必须包含对应的push_back(),push_front(),insert()操作,这样才能对容器进行插入. 插入迭代器分三种 back_insert_iterator(C) 在容器末端插入数据 front_insert_iterator(C) 在容器前端插入数据 insert_iterator(C) 在容器指定位置插入数据 对应三个

C++ Primer 学习笔记_54_STL剖析(九):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_i

回顾 适配器 1.三种类型的适配器: (1)容器适配器:用来扩展7种基本容器,利用基本容器扩展形成了栈.队列和优先级队列 (2)迭代器适配器:(反向迭代器.插入迭代器.IO流迭代器) (3)函数适配器:函数适配器能够将仿函数和另一个仿函数(或某个值.或某个一般函数)结合起来. [1]针对成员函数的函数适配器 [2]针对一般函数的函数适配器 一.迭代器适配器 1.反向迭代器 2.插入迭代器 3.IO流迭代器 其中反向迭代器,利用正向迭代器实现可以参考以前<46_STL剖析(三)>. 二.插入迭代

第八章 Python可迭代对象、迭代器和生成器

8.1 可迭代对象(Iterable) 大部分对象都是可迭代,只要实现了__iter__方法的对象就是可迭代的. __iter__方法会返回迭代器(iterator)本身,例如: >>> lst = [1,2,3] >>> lst.__iter__() <listiterator object at 0x7f97c549aa50> Python提供一些语句和关键字用于访问可迭代对象的元素,比如for循环.列表解析.逻辑操作符等. 判断一个对象是否是可迭代对象

Python基础第九天——迭代对象、 迭代器对象、生成器、三元表达式列表解析、生成器表达式

鸡汤: 要时刻不断地给自己灌输一种思想:都TMD是个人,凭什么他会而我就不会?王候将相宁有种乎?我承认人有天赋的差别,但是勤奋能弥补缺陷!所以,根据以上观点得出以下结论,只要出生时不是个傻子,那么就没有蠢的人,只有懒的猪!只要勤奋上进,小白也会变大神.加油 --奔跑吧小白 一.迭代对象.迭代器对象 1.迭代 定义:带有__iter__方法的就是可迭代对象 python常用的数据类型中,除了数字外,都是迭代对象. 例:用isinstance判断python常用数据类型是否为迭代对象,经验证,pyt

what&#39;s the python之可迭代对象、迭代器与生成器(附面试题)

可迭代对象 字符串.列表.元祖.集合.字典都是可迭代的,数字是不可迭代的.(可以用for循环遍历取出内部元素的就是可迭代的) 如何查看一个变量是否为可迭代: from collections import Iterable l = [1,2,3,4] t = (1,2,3,4) d = {1:2,3:4} s = {1,2,3,4} print(isinstance(l,Iterable)) print(isinstance(t,Iterable)) print(isinstance(d,Ite

可迭代对象和迭代器

1.首先可以用于for循环的对象统称为可迭代对象(Interable),像list dict str都是可迭代对象.可以被next()函数调用并不断返回下一个值的对象成为迭代器(Interable).看一下函数的实现: class Iterable(metaclass=ABCMeta): __slots__ = () @abstractmethod def __iter__(self): ##使用__iter__是迭代对象变为迭代器 while False: yield None @classm