C ++ 插入迭代器

C++ 语言提供了三种插入器,其差别在于插入元素的位置不同。

(1)back_inserter,创建一个使用push_back 实现插入的迭代器。

(2)front_inserter,创建一个使用push_front实现的插入迭代器。

(3)inserter,使用insert实现的插入,此外还带有第二个实参:指向插入起始位置的迭代器。

back_inserter 是一种迭代器适配器,它与容器适配器一样,是以一个容器对象作为实参,生成一个适应期实参行为的迭代器。举例说明其用法。

1 vector<int> vec; // empty vector
2 fill_n(back_inserter(vec),10,0); // appends 10 elements to vec 

back_inserter 生成一个绑定在 vector 容器上的插入迭代器。在试图通过这个迭代器给元素赋值时,赋值运算将调用push_back 在容器中添加一个具有指定值的元素。

算法中的copy 函数。copy函数带有三个迭代器参数,头两个指定输入范围,第三个则指向目标序列的一个元素。例如:

1 vector<int> vec;//empty vector
2 // copy elements from ilst into ivec
3 copy(ilst.begin(),ilst.end(),back_inserter(vec) );

copy 从输入范围中读取元素,然后将它们赋值给目标vec

replace 与replace_copy 算法:replace 算法有四个实参:一对指定输入范围的迭代器和两个值,后两个值是第一个值的元素替换成第二个。

replace_copy  算法不改变原来序列的元素,它有五个实参,第三个迭代器实参,指定保存调整后序列的保存位置。

replace(ilst.begin(),ilst.end(),5,4);//replace any element with value of 5 by 4
//creat empty vector to hold the replacement
vector<int> ivec;
replace_copy(ilst.begin(),ilst.end(),back_inserter(ivec),5,4);

front_inserter  同 back_inserter 类似,该函数创建一个迭代器,调用它所关联的容器的push_front 成员函数代替赋值运算。

注:当front_inserter 的关联容器 提供push_front 操作时才能使用front_inserter。在vetor 容器使用会出现错误。

inserter   函数带有两个实参:所关联的容器和指示插入起始位置的迭代器。

vector<int>::iterator it = ivc.begin();
replace_copy(ilst.begin(),ilst.end(),inserter(ivec,it),5,4);

在创建 inserter 时,应指明新元素在何处插入。inserter 函数总是 在它的迭代器实参所标明的位置前面插入新元素。

小结:三种插入迭代器的区别:在插入的位置不同。

back_inserter 使用push_back 实现在容器末端插入,front_inserter 使用push_front 实现在容器前端插入,inserter 使用insert 实现插入,它还带有第二个实参,指向插入起始位置的迭代器。
时间: 2024-10-10 17:14:52

C ++ 插入迭代器的相关文章

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

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

(转载)C++迭代器之&#39;插入迭代器

1. 定义 插入型迭代器(Insert Iterator),又叫插入器(Inserter). 2. 作用 插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作.算法库对所有在容器上的操作有约束:决不修改容器的大小(不插入.不删除).有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一统带,即保持了设计上的一致性. 3. 类型 3.1 尾部插入器(back_insert_iterator)使用:通过调用容器的push_back()成员函数来插入元素功能:在容器的

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剖析(三)>. 二.插入迭代

C++之插入迭代器

#include <iostream> #include <vector> #include <list> #include <iterator> using namespace std; template<typename T> void PrintElements(T c) { typename T::const_iterator itr = c.begin();//在GCC下typename不能省略 while(itr != c.end()

10.4 再探迭代器-插入/IO/反向

10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back_inserter(iVec): iter = value: (2)front_inserter: 接受一个参数, 示例: auto iter = front_inserter(iVec): iter = value: (3)inserter: 接受两个参数,示例:auto iter = inser

C++ Primer 阅读笔记:迭代器和容器 小结

原创 by zoe.zhang  0.写在前面的话 我是在2011年学的C++,但是那一年恰好是C++11新标准的一年,但是大学上学的C++还是基于C++98的风格的,使用的编译器也是VC6.0,啊,插一句话,虽然VC6现在看起来有些简陋,而且也不支持C++新标准,但是因为它的轻便,以及有些年代感的编码界面,我自己感觉它就像是一柄钝剑,加上是我接触的第一个编译器,因此对它还是怀有敬意的.当然,现在用的VS2013,编程友好,功能强大,也是非常棒的了.它是支持C++11标准的.C++11相对C++

【C++/STL】list的实现(采用空间配置器和迭代器)

在list库函数的编译中仍然有很多问题,在源代码的编译中有些内容尚未搞懂,在后期的学习中会进行更加深入的学习,希望大家可以对我的问题提出建议和批评,谢谢大家~ 具体的代码如下: #include <iostream> using namespace std; //采用迭代器和空间配置器所实现的双向链表的基本功能 template<class _Ty,class _A = allocator<_Ty> > //定义模板类 class list //list类 { publ

再探迭代器

插入迭代器 迭代器被绑定到一个容器上,可用来向容器插入元素. back_inserter创建一个使用push_back的迭代器 front_inserter创建一个使用push_front的迭代器 inserter创建一个使用insert的迭代器,此函数接受哦第二个参数,这个参数必须是指向一个给定容器的迭代器.元素将被插入到给定迭代器所表示的元素之前. list<int> lst = {1,2,3,4}; list<int> lst1, lst2; //空list //拷贝完成之后

迭代器适配器(二)general inserter的实现

上节我们实现了back_inserter和front_inserter,接下来是更为普通的插入迭代器,它允许用户指定插入位置. 实现代码如下: #ifndef ITERATOR_HPP #define ITERATOR_HPP template <typename Container> class InsertIterator { public: typedef typename Container::value_type value_type; typedef typename Contai