插入迭代器(按位置插入)
//插入迭代器
template<typename Container>
class My_insert_iterator
{
public:
typedef My_insert_iterator<Container> _Myt;
My_insert_iterator(Container& con,typename Container::iterator it)
{
pcon = &con;//容器指针指向容器对象
mit = it;
}
_Myt& operator*()//返回后插型迭代器的对象
//*为单目运算符,返回类型为My_back_insert_iterator<Container>
{
return *this;
}
_Myt& operator=(const typename Container::value_type& val)//形参为值类型
{
pcon->insert(mit,val);
return *this;
}
private:
Container* pcon;//指向容器对象 容器类型的指针
//Container::iterator mit;//err
//Container是模板不编译,不知道iterator到底是类型还是静态的成员变量
typename Container::iterator mit;//ok
};
//迭代器:面向对象的指针
template<typename Container>//模板类型参数
void Show(const Container& con)
{
//Container::iterator it = con.begin;//err
Container::const_iterator it = con.begin();
for (it; it != con.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
int arr[] = { 363, 3, 13, 13, 1, 31, 3 };
int len = sizeof(arr) / sizeof(arr + len);
vector<int> vec(arr, arr + len);
//insert_iterator<vector<int>> ii(vec, vec.begin());
My_insert_iterator<vector<int>> ii(vec, vec.begin());
*ii = 40;
Show(vec);
return 0;
}
插入泛型算法 inserter函数的实现
template<typename Container>
insert_iterator<Container> My_inserter(Container& con,typename Container::iterator mit)
{
return insert_iterator<Container>(con,mit);
}
int main()
{
int arr[] = { 363, 3, 13, 13, 1, 31, 3 };
int len = sizeof(arr) / sizeof(arr + len);
vector<int> vec(arr, arr + len);
//inserter(vec, vec.begin() + 2) = 40;
My_inserter(vec, vec.begin() + 2) = 40;
Show(vec);
return 0;
}