#include<iostream>
#include<iterator>
#include<vector>
#include<numeric>
#include<string>
using namespace std;
int main()
{
vector<int> A{ 0,1,2,3,4,5,6,7 };
//插入迭代器
//back_inserter(A) 创建一个使用push_back的迭代器
//front_inserter(A) 创建一个使用push_front的迭代器
//inserter(A,iter) 创建一个使用insert的迭代器,iter(迭代器)是插入元素的位置
cout << "插入迭代器!" << endl;
auto it = inserter(A, A.begin());
for (int i = 7; i > 0; --i) {
*it = i;
++it;//++it,it++,*it 虽然存在,但不会对it做任何事
//所以++it去掉也没关系,*it变成it也可以
}
for (const auto &m : A)
cout << m << " ";
cout << endl;
//iostream迭代器
cout << "iostream 迭代器" << endl;
vector<int> B;
istream_iterator<int> in_iter(cin);
istream_iterator<int> eof;
while (in_iter != eof) {
B.emplace_back(*in_iter++);
}
copy(B.begin(), B.end(), ostream_iterator<int>(cout, " "));
cout << endl;
//直接构造
cin.clear();//将cin中所有条件状态位置位,即把流重新变成有效
cin.ignore();//丢弃输入流中的一个字符,cin.ignore(c,h)则是
//每抛弃一个字符,它都要计数和比较字符:
//如果计数值达到c或者被抛弃的字符是h,则cin.ignore(c,h)函数执行终止
//cin.sync() //sync则是清空流中数据
in_iter = cin;
vector<int> C(in_iter, eof);
copy(C.begin(), C.end(), ostream_iterator<int>(cout, " "));
cout << endl;
//输入流迭代器求和
cin.clear();
cin.ignore();
istream_iterator<int> in(cin),eof1;
cout << accumulate(in, eof1, 0) << endl;
/*
//ignore 测试
int i;
cin >> i;
cout << i << endl;
cin.ignore();
cin.ignore();
cin >> i;
cout << i << endl;
cin >> i;
cout << i << endl;
*/
//输出流迭代器
//ostream_iterator<T> out(s,d) *out,++out,out++不做任何事(和插入迭代器类似)
//反向迭代器
string line("I'm fine, thanks!");
auto comma = find(line.rbegin(), line.rend(), ',');
cout << string(line.rbegin(), comma) << endl;
cout << string(comma.base(), line.end()) << endl;//返回正向的迭代器
system("PAUSE");
return 0;
}
C++ Primer学习笔记——迭代器
最新推荐文章于 2024-08-26 22:06:50 发布