11_23 STL迭代器
STL迭代器
顺序迭代器—遍历型迭代器
iterator 正向迭代器
reverse_iterator 反向迭代器
#include<iostream>
#include<vector>
using namespace std;
template<typename CON>
void show(CON& src)
{
typename CON::iterator it = src.begin();
for (; it != src.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
template<typename CON>
void show_reverse(CON& src)
{
typename CON::reverse_iterator it = src.rbegin();
for (; it != src.rend(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
vector<int>v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
show(v1);
show_reverse(v1);
return 0;
}
const_iterator 常量正向迭代器
reverse_const_iterator 常量反向迭代器
#include<iostream>
#include<vector>
using namespace std;
template<typename CON>
void show(CON& src)
{
typename CON::iterator it = src.begin();
for (; it != src.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
template<typename CON>
void show_reverse(CON& src)
{
typename CON::reverse_iterator it = src.rbegin();
for (; it != src.rend(); it++)
{
cout << *it << " ";
}
cout << endl;
}
template<typename CON>
void show_const(const CON& src)
{
typename CON::const_iterator it = src.cbegin();
for (; it != src.cend(); it++)
{
cout << *it << " ";
}
cout << endl;
}
template<typename CON>
void show_reverse_const(const CON& src)
{
typename CON::const_reverse_iterator it = src.crbegin();
for (; it != src.crend(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
vector<int>v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
show(v1);
show_reverse(v1);
const vector<int>v2(v1.begin(), v1.end());
show_const(v2);
show_reverse_const(v2);
vector<int>::const_iterator it2 = v2.cbegin();
vector<int>::const_reverse_iterator it3 = v2.crbegin();
return 0;
}
插入型迭代器
插入型迭代器是一个模板,模板需要指定类型容器,指定容器当中位置
inserter使用函数模板封装类对象模板的产生
insert_iterator 随机插入型迭代器 ----- insert
back_insert_iterator 后插型迭代器 ------ push_back();
list<int>list1;
for (int i = 0; i < 10; i++)
{
list1.push_back(i);
}
front_insert_iterator<list<int>> it3(list1);
auto it4 = front_inserter(list1);
*it3 = 888;
*it4 = 777;
show(v2);
front_insert_iterator 前插型迭代器 ----- push_front
流迭代器
ostream_iterator<int> ito(cout, " ");
for (int i = 0; i < 10; i++)
{
ito = i;
}
ostream_iterator<int> ito(cout, " ");
for (int i = 0; i < 10; i++)
{
ito = i;
}
cout << endl;
Insert(list1.begin(), list1.end(), ito);
auto函数:可以推断出插入的数据类型
#include<iostream>
#include<vector>
#include<iterator>
#include<list>
using namespace std;
template<typename CON>
void show(CON& src)
{
typename CON::iterator it = src.begin();
for (; it != src.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
template<typename CON>
void show_reverse(CON& src)
{
typename CON::reverse_iterator it = src.rbegin();
for (; it != src.rend(); it++)
{
cout << *it << " ";
}
cout << endl;
}
template<typename CON>
void show_const(const CON& src)
{
typename CON::const_iterator it = src.cbegin();
for (; it != src.cend(); it++)
{
cout << *it << " ";
}
cout << endl;
}
template<typename CON>
void show_reverse_const(const CON& src)
{
typename CON::const_reverse_iterator it = src.crbegin();
for (; it != src.crend(); it++)
{
cout << *it << " ";
}
cout << endl;
}
template<typename INSERT_IT,typename IT>
void Insert(const IT first, const IT& last, INSERT_IT insert_it)
{
IT tmp = first;
for (; tmp != last; tmp++)
{
*insert_it = *tmp;
}
}
template<typename CON>
insert_iterator<CON>minserter(CON& con, typename CON::iterator it)
{
return insert_iterator<CON>(con, it);
}
template<typename CON>
back_insert_iterator<vector<int>> mback_inserter(CON& con)
{
return back_insert_iterator<vector<int>>(con);
}
int main()
{
vector<int>v1;
vector<int>v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
insert_iterator<vector<int>> it(v2, v2.begin());
for (int i = 0; i < 10; i++)
{
*it = i + 100;
}
show(v2);
insert_iterator<vector<int>> it1(v2, v2.begin() + 1);
Insert(v1.begin(), v1.end(), inserter(v2, v2.begin() + 1));
show(v2);
back_insert_iterator<vector<int>> it2(v2);
*it2 = 999;
Insert(v1.begin(), v1.begin() + 3, it2);
show(v2);
list<int>list1;
for (int i = 0; i < 10; i++)
{
list1.push_back(i);
}
front_insert_iterator<list<int>> it3(list1);
auto it4 = front_inserter(list1);
*it3 = 888;
*it4 = 777;
show(v2);
ostream_iterator<int> ito(cout, " ");
for (int i = 0; i < 10; i++)
{
ito = i;
}
cout << endl;
Insert(list1.begin(), list1.end(), ito);
cout << endl;
istream_iterator<int> iti(cin);
int a;
a = *iti;
ito = a;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)