《c++ primer 》chapter10

落爺英雄遲暮 提交于 2020-02-06 02:52:00
1、使用流迭代器读取文本文件,存入一个vector中的string里,并用流迭代器和copy输出
#include<iostream>
#include<fstream>
#include<iterator>
#include<vector>
#include<string>
using namespace std;


int main(void)
{
	ifstream FILE("1.txt");  //输入流FILE绑定文件1.txt
	istream_iterator<string> string_it(FILE);  //从FILE输入流中读取string类型
	istream_iterator<string> string_eof;  //默认构造定义尾后迭代器

	//获取输入流FILE中的string类型元素加入vector中
	vector<string> string_vt;
	while (string_it != string_eof)
		string_vt.push_back(*string_it++);

	//使用迭代器输出vector中的内容
	ostream_iterator<string> os_it(cout," ");
	copy(string_vt.begin(), string_vt.end(), os_it);  //copy函数拷贝vector到cout流
	cout << endl;  //输出cout流


	system("pause");
	return 0;
}
2、使用流迭代器、sort、copy从标准输入读取一个整数序列,将其排序,并将结果写到标准输出
#include<iostream>
#include<iterator>
#include<algorithm>
#include<vector>
using namespace std;


int main(void)
{
	istream_iterator<int> int_it(cin);
	istream_iterator<int> int_eof;

	vector<int> int_vt;
	while (int_it != int_eof)
		int_vt.push_back(*int_it++);
	sort(int_vt.begin(), int_vt.end());
	vector<int>::iterator it = unique(int_vt.begin(), int_vt.end());

	ostream_iterator<int> int_ot(cout, " ");
	copy(int_vt.begin(), it, int_ot);
	cout << endl;


	system("pause");
	return 0;
}

3、一个输入文件和两个输出文件的文件名。输入文件保存整数。将奇数、偶数分别输出至两个输出文件,其中,奇数每个值用空格分开,偶数每个值占一行。
#include<iostream>
#include<iterator>
#include<fstream>
using namespace std;

int main(void)
{
	ifstream input("1.txt");
	ofstream output_odd("2.txt");
	ofstream output_even("3.txt");

	istream_iterator<int> int_it(input);
	istream_iterator<int> int_eof;
	ostream_iterator<int> int_ot_odd(output_odd, " ");
	ostream_iterator<int> int_ot_even(output_even, "\n");

	while (int_it != int_eof)
	{
		if ((*int_it) % 2 == 0)
			int_ot_even = *int_it++;
		else
			int_ot_odd = *int_it++;
	}


	system("pause");
	return 0;
}

四、分别使用正向、反向迭代器逆序输出vector
#include<iostream>
#include<vector>
using namespace std;

int main(void)
{
	vector<int> vt = { 1,2,3,4,5,6 };
	//正向
	for (vector<int>::iterator it = --vt.end();; --it)
	{
		cout << *it << " ";
		if (it == vt.begin())
			break;
	}
	cout << endl;
	//反向
	for (vector<int>::reverse_iterator it = vt.rbegin(); it != vt.rend(); ++it)
		cout << *it << " ";
	cout << endl;
	
	
	system("pause");
	return 0;
}
五、给定vector10个元素,将位置3到7间的元素按逆序拷贝至一个list中。
#include<iostream>
#include<vector>
#include<list>
#include<iterator>
using namespace std;

int main(void)
{
	vector<int> vt = { 12,23,34,45,56,67,78,89,910,1011 };
	list<int> lt(vt.rbegin() + 2, vt.rend() - 3);

	ostream_iterator<int> ot(cout, " ");
	copy(lt.begin(), lt.end(), ot);
	cout << endl;

	system("pause");
	return 0;
}

六、结合lambda表达式使用list(或forward_list)的特定算法merge、sort。
#include<iostream>
#include<list>
#include<iterator>
using namespace std;


int main(void)
{
	list<int> lt1 = { 123,234,456,135,68,2135,864,457,32,425,2,3214,452,68,124 };
	list<int> lt2 = { 235,421,31,443,5,45,657,76,8,45,43,32,43,658,6,53,1223 };
	lt1.sort([](const int &x, const int &y) {return x > y; });
	lt2.sort([](const int &x, const int &y) {return x > y; });
	lt1.merge(lt2, [](const int &x, const int &y) {return x > y; });
	ostream_iterator<int> ot(cout, " ");
	copy(lt1.begin(), lt1.end(), ot);
	cout << endl;

	system("pause");
	return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!