C++primer_泛型算法-插入迭代器和iostream迭代器
来源:互联网 发布:软件开发工程师职称 编辑:程序博客网 时间:2024/06/05 15:26
- 三种插入迭代器的区别?
- 插入迭代器本质上是一种适配器迭代器,标准库为了保证通用性,并不直接操作容器,而是通过迭代器间接操作容器,因此,算法不具备直接向容器插入元素的能力,而插入器正是帮助算法实现向容器内插入元素的机制。
- 除了 back_inserter,标准库还提供了front_inserter和inserter,三者的差异主要在如何向容器内插入元素back_inserter是通过用push_back。front_inserter是调用push_front,而inserter调用insert。
- 这三种调用方式也决定了元素位置插入的不同,分别是back尾后插入front首前插入,而inserter则是插入到给定位置,因此inserter在插入操作的时候传入两个参数。记住只有在容器支持的情况下,算法操作才可以被执行 。
以下是简单的三种插入迭代器的应用,加上一点算法基础主要包含了C++primer第十章泛型算法第四节插入迭代器和iostream迭代器的操作。其中个别注释代表着这段代码,有点特殊。简单代码习题包含着10.22-10.31。对于10.33.我重新写出来吧
#include <iostream>#include <vector>#include<list>#include<string>#include<numeric>#include<algorithm>#include <fstream>using namespace std;int main(int argc, char ** argv){ vector<int >vi = {1,78,2,34,5,5,6,5,6}; list<int >li; unique_copy(vi.begin(), vi.end(), back_inserter(li)); for (auto v:li) { cout << v << " "; } cout << endl; list<int >frontli; unique_copy(vi.begin(), vi.end(), front_inserter(frontli)); for (auto v : frontli) { cout << v << " "; } cout << endl; list<int >insertli; unique_copy(vi.begin(), vi.end(), inserter(insertli,insertli.begin())); unique_copy(vi.begin(), vi.end(), inserter(insertli, (++insertli.begin()))); for (auto v : insertli) { cout << v << " "; } cout << endl; ////////////////////////////////////////////////////////////////////////// ifstream in("xujjian.txt");//打开文件并读取 if (!in) { cout << "代开文件失败" << endl; exit(1); } istream_iterator<int> in_iter(in);//绑定流这里可以是文件流也可以是输入流cin istream_iterator<int> eof;//这个eof必须显式的定义出来,以便于系统识别文件的末尾 vector<int>words; while (in_iter!=eof) { words.push_back(*in_iter++); } for (auto v : words)//auto C++11的新特性,遍历 auto x:v cout << v<<" "; cout << endl; ////////////10.31/////////////////////////////////////////// istream_iterator <int>cin_iter(cin); vector<int>viint; while (cin_iter != eof) { viint.push_back(*cin_iter++); } sort(viint.begin(),viint.end()); ostream_iterator <int>out_iter(cout," "); unique_copy(viint.begin(),viint.end(),out_iter); system("pause");}
下面是10.33的主要代码。其中包含了文件迭代器的简单应用。
////////////////////////////////////////////////////////////////////////////本文件主要体现了iostream迭代器的应用#include<iostream>#include<vector>#include <istream>#include <fstream>#include <string>#include <list>#include <algorithm>#include <numeric>using namespace std;int main(int argc, char ** argv){ //在这里利用argc和argv数组可以记录输入的文件名从而对文件进行操作,在这个例子为了让代码更加清晰可见在这里使用直接对文件操作,而不再输入的情况下进行操作,文件名直接默认。 ifstream openedfile("xujjian.txt"); ofstream outfile1("xujian1.txt");//文件默认模式是不存在则新建此文件,不存在的话你会发现在项目目录下存在了此文件 ofstream outfile2("xujian2.txt"); if (!openedfile) { cout << "打开数据文件失败" << endl; exit(1); } if (!outfile1)//在这里存在一个文件误区就是如果文件不存在,则打开失败,需要传入参数,保证如果定向输出文件失败的话,可以新建此文件 { cout << "打定向输出文件1失败" << endl; } if (!outfile2) { cout << "打开定向输出文件2失败" << endl; } istream_iterator<int>eof, in_iter(openedfile); ostream_iterator<int>out_iter1(outfile1," "); ostream_iterator<int>out_iter2(outfile2, "\n ");//第二个参数保证没输出一个数据后面的分隔符 while (in_iter != eof)//保证将这个文件的偶数分割开来 { if (*in_iter & 1) { *out_iter1++ = *in_iter; } else *out_iter2++ = *in_iter; in_iter++; } system("pause");}
- 在这里有一点就是程序运行结束后必须按回车让程序运行结束,到此文件保存,生成可读取文件,不能异常退出,要不然文本文件不能被保存。可以在这段程序中添加两个vector容器然后将文本文件内容放到容器里面,这样可以验证文件是否被写入数据。
到此结束。
0 0
- C++primer_泛型算法-插入迭代器和iostream迭代器
- C++语法基础--泛型算法(generic algorithm)--iostream迭代器
- iostream迭代器
- iostream 迭代器
- iostream迭代器
- iostream迭代器
- iostream迭代器
- C++学习笔记28——泛型算法之iostream迭代器
- c++primer_类
- (笔记)c++primer_第一章
- <iostream>和<iostream.h>
- iostream 和 iostream.h
- <iostream>和<iostream.h>
- C++ iostream 迭代器 STL
- C++ iostream迭代器简介
- 流迭代器iostream迭代器
- iostream迭代器的使用
- C++ iostream迭代器简介
- AlertDialog应用——App退出提示框
- Android调用相机保存图片到相册
- WinDbg 调试dmp文件
- 内部排序-插入排序-希尔排序
- flume-ng interceptors
- C++primer_泛型算法-插入迭代器和iostream迭代器
- jdk安装
- Struts2工作原理
- hiveServer2 挂起处理
- CCS5.5里DSP工程建及Simulator模式配置
- 学习log4j
- java中cookie的操作
- 阻碍成长的几件小事
- ExtJS(6)- 用Sencha Cmd构建打包Ext项目