C++之插入迭代器
#include<iostream>
#include<vector>
#include<list>
#include<iterator>
usingnamespace std;
template<typename T>
voidPrintElements(T c)
{
typename T::const_iterator itr = c.begin();//在GCC下typename不能省略
while(itr != c.end())
{
cout <<*itr++<<" ";
}
cout << endl;
}
int main()
{
vector<int> vecSrc;
list<int> vecDest;
for(vector<int>::size_type i =0; i <3;++i)
{
vecSrc.push_back(i);
}//--0,1,2---
/**
* 第一种方法是调用<iterator>头文件中的函数来返回一个back_insert_iterator对象
* template< class Container >
* std::back_insert_iterator<Container> back_inserter( Container& c );
*/
/**
* 第二种方法是调用back_insert_iterator类的构造函数来创建类对象
* explicit
* back_insert_iterator(_Container& __x) : container(&__x) { }
*/
copy(vecSrc.begin(), vecSrc.end(), back_inserter(vecDest));
//copy(vecSrc.begin(), vecSrc.end(), back_insert_iterator<list<int> >(vecDest));
PrintElements(vecDest);//--0,1,2---
copy(vecSrc.begin(), vecSrc.end(), front_inserter(vecDest));
//copy(vecSrc.begin(), vecSrc.end(), front_insert_iterator<list<int> >(vecDest));
PrintElements(vecDest);//--2,1,0,0,1,2---
copy(vecSrc.begin(),vecSrc.end(), inserter(vecDest,++vecDest.begin()));
//copy(vecSrc.begin(), vecSrc.end(), insert_iterator<list<int> >(vecDest, ++vecDest.begin()));
PrintElements(vecDest);//--2,0,1,2,1,0,0,1,2---
back_insert_iterator<list<int>> itBack = back_inserter(vecDest);//这里也可以直接调用构造函数
*itBack =101;
*itBack =102;//itBack每次都指向容器最后的元素
PrintElements(vecDest);//.....101,102
front_insert_iterator<list<int>> itFront = front_insert_iterator<list<int>>(vecDest);
*itFront =1001;
*itFront =1002;
PrintElements(vecDest);//1002,1001......
insert_iterator<list<int>> itIst = inserter(vecDest, vecDest.begin());
*itIst =11;
*itIst =12;
PrintElements(vecDest);//--11,12,1002,1001.....
// *itIst = value;相当于
// itIst = c.insert(it,value);
// ++itIst;
// insert函数返回的是指向插入元素的迭代器,由于该函数是在给定迭代器之前插入元素,所以++itIst之后
// itIst依然指向的是原来的元素。操作结束后itIst指向的位置未发生改变
return0;
}
C++之插入迭代器的更多相关文章
- c/c++ 标准库 插入迭代器 详解
标准库 插入迭代器 详解 插入迭代器作用:copy等函数不能改变容器的大小,所以有时copy先容器是个空的容器,如果不使用插入迭代器,是无法使用copy等函数的. 例如下面的代码就是错误的: list ...
- 【C++ Primer 第10章】 10.4.1 插入迭代器
目录 • iostream迭代器 • 反向迭代器 插入迭代器 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 头文件为:#include<iterator it=t 在it指 ...
- 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
一.迭代器适配器 反向迭代器 插入迭代器 IO流迭代器 其中反向迭代器可以参考以前的文章. 二.插入迭代器 插入迭代器实际上是一个输出迭代器(*it=; ++) back_insert_iterato ...
- STL之--插入迭代器(back_inserter,inserter,front_inserter的区别)
除了普通迭代器,C++标准模板库还定义了几种特殊的迭代器,分别是插入迭代器.流迭代器.反向迭代器和移动迭代器,定义在<iterator>头文件中,下面主要介绍三种插入迭代器(back_in ...
- C++迭代器之'插入迭代器
1. 定义 插入型迭代器(Insert Iterator),又叫插入器(Inserter). 2. 作用 插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作.算法库对所有在容器上的操作 ...
- uva 12096 The SetStack Computer(STL set的各种库函数 交集 并集 插入迭代器)
题意: 有5种操作: PUSH:加入“{}”空集合入栈. DUP:栈顶元素再入栈. UNION:出栈两个集合,取并集入栈. INTERSECT:出栈两个集合,取交集入栈. ADD:出栈两个集合,将先出 ...
- 【C++ Primer 第10章】 10.4.2 插入迭代器
iostream迭代器 标准库为iostream定义了可用于这些IO类型对象的迭代器. istream_iterator读取输入流, ostream_iterator向一个输出流写数据. 1. i ...
- c++ insert iterators 插入型迭代器
insert iterators 插入型迭代器 (1)front inserters 前向插入迭代器 只适用于提供有push_front()成员函数的容器,在标准程序库中这样的容器是deque和lis ...
- 10.4 再探迭代器-插入/IO/反向
10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back ...
随机推荐
- bzoj5210最大连通子块和
题解: 考虑朴素的dp:$$f_{u} = max(\sum_{v} f_{v} + w_{u} , 0) \ \ \ \ h_{u} = max( max_{v} \{ h_{v} \} , h ...
- BZOJ 1391 [Ceoi2008]order
1391: [Ceoi2008]order Description 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完 ...
- [POI2015]WIL-Wilcze doły
题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式: 第一行包含三个整数 ...
- 【线段树分治】【P5227】 [AHOI2013]连通图
Description 给定一个无向连通图和若干个小集合,每个小集合包含一些边,对于每个集合,你需要确定将集合中的边删掉后改图是否保持联通.集合间的询问相互独立 定义一个图为联通的当且仅当对于任意的两 ...
- std::async
https://www.cnblogs.com/qicosmos/p/3534211.html https://bobjin.com/blog/c_cpp_docs/reference/en/cpp/ ...
- 【题解】Willem, Chtholly and Seniorious Codeforces 896C ODT
Prelude ODT这个东西真是太好用了,以后写暴力骗分可以用,写在这里mark一下. 题目链接:ヽ(✿゚▽゚)ノ Solution 先把原题解贴在这里:(ノ*・ω・)ノ 简单地说,因为数据是全部随 ...
- Java入门:练习——自定义通用工具类
请编写一个通用工具类,该类具有如下功能: 1)判断一个字符串是否是邮箱地址 2)判断一个字符串是否是手机号码 3)判断一个字符串是否是电话号码 4)判断一个字符串是否是IP地址 代码结构如下,请补充完 ...
- python 中__getitem__ 和 __iter__ 的区别
# -*- coding: utf-8 -*- class Library(object): def __init__(self): self.books = { 'title' : 'a', 'ti ...
- [USACO5.3]量取牛奶Milk Measuring
https://daniu.luogu.org/problemnew/show/P2744 滚动数组压去第一维:前i种木桶 f[j] 量取体积j最少需要几种木桶 g[j] 体积j的最优解是否使用了第 ...
- java与Excel (.xls文件) ---使用JXL创建,增添表格文件
由于一些原因要搞一下excel文件,个人感觉poi太难,所以用了JXL(感觉比较简单). 1.添加外部归档 jxl.jar 2. /** 生成的xls文件第一次需要手动选择EXCEL打开* * */ ...