插入迭代器
1. 测试代码:
1 #include<iostream> 2 #include<vector> 3 #include<list> 4 #include<iterator> 5 #include<algorithm> 6 using namespace std; 7 8 void display(list<int> li) 9 { 10 for (auto c : li) 11 cout << c << " "; 12 cout << endl; 13 } 14 15 int main() 16 { 17 vector<int> vi = { 1, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 18 list<int> li1, li2, li3; 19 20 unique_copy(vi.begin(), vi.end(), inserter(li1, li1.begin())); 21 display(li1); 22 23 unique_copy(vi.begin(), vi.end(), back_inserter(li2)); 24 display(li2); 25 26 unique_copy(vi.begin(), vi.end(), front_inserter(li3)); 27 display(li3); 28 system("pause"); 29 return 0; 30 }
输出结果:
iostream迭代器
1. 测试代码:
1 #include<iostream> 2 #include<vector> 3 #include<iterator> 4 #include<algorithm> 5 using namespace std; 6 7 int main() 8 { 9 istream_iterator<int> in_iter(cin); 10 istream_iterator<int> eof; 11 vector<int> vi; 12 while (in_iter != eof) 13 vi.push_back(*in_iter++); 14 15 sort(vi.begin(), vi.end()); 16 17 ostream_iterator<int> out_iter(cout, " "); 18 copy(vi.begin(), vi.end(), out_iter); 19 return 0; 20 }
输出结果:
2. 测试代码:
1 #include<iostream> 2 #include<vector> 3 #include<iterator> 4 #include<algorithm> 5 using namespace std; 6 7 int main() 8 { 9 istream_iterator<int> in_iter(cin); 10 istream_iterator<int> eof; 11 vector<int> vi; 12 while (in_iter != eof) 13 vi.push_back(*in_iter++); 14 15 sort(vi.begin(), vi.end()); 16 17 ostream_iterator<int> out_iter(cout, " "); 18 unique_copy(vi.begin(), vi.end(), out_iter); 19 return 0; 20 }
输出结果:
反向迭代器
1. 测试代码:
1 #include<iostream> 2 #include<vector> 3 #include<iterator> 4 using namespace std; 5 6 int main() 7 { 8 vector<int> vec = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 9 for (auto r_iter = vec.crbegin(); r_iter != vec.crend(); ++r_iter) 10 cout << *r_iter << " "; 11 cout << endl; 12 return 0; 13 }
输出结果:
2. 测试代码:
1 #include <iostream> 2 #include <deque> 3 #include <algorithm> 4 #include <iterator> 5 using namespace std; 6 7 void print(int elem) 8 { 9 cout << elem << ' '; 10 } 11 12 int main() 13 { 14 deque<int> coll; 15 for (int i = 1; i <= 9; ++i) 16 coll.push_back(i); 17 18 deque<int>::iterator pos1; 19 pos1 = find(coll.begin(), coll.end(), 2); 20 21 deque<int>::iterator pos2; 22 pos2 = find(coll.begin(), coll.end(), 7); 23 for_each(pos1, pos2, print); 24 cout << endl; 25 26 deque<int>::reverse_iterator rpos1(pos1); 27 deque<int>::reverse_iterator rpos2(pos2); 28 for_each(rpos2, rpos1, print); 29 cout << endl; 30 return 0; 31 }
输出结果:
【分析】
代码首先在一个deque中插入1到9,然后查找元素值为2和7的位置,分别赋值给迭代器pos1和pos2,然后输出,由于STL中的操作总是左开右闭的区间,即[2,7),所以输出2 3 4 5 6,7不会输出。
接下来将迭代器转换成逆向迭代器,再次输出,对于反向迭代器,由于是反向,所以按逻辑来说它是左开右闭的(这里我尝试了rpos2为iterator.end(),rpos1为iterator.begin(),此时输出全部),即(7,2](事实上还是左闭右开,只不过此时的左和iterator顺序一样)。所以输出6 5 4 3 2,下面的图片解释的很清楚。