#include "stdafx.h"
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
#include <iterator>
/*
* 算法库对所有在容器上的操作有个承诺:决不修改容器的大小(不插入、不删除)。
* 有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一承诺,即保持了设计上的一致性。
*/
using namespace std;
int main()
{
//c++插入迭代器
vector<int> vInt = { 1,2,3,4,5 };
list<int> listInt;
//向后插入迭代器,内部调用push_back
back_insert_iterator<decltype(listInt)> backIter(listInt);
*backIter = 30;
//copy算法中的 运用
copy(vInt.begin(), vInt.end(), back_insert_iterator<decltype(listInt)>(listInt));
for (auto iter = listInt.begin(); iter != listInt.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl;
//向前插入迭代器,内部调用push_front
front_insert_iterator<decltype(listInt)> frontIter(listInt);
*backIter = 30;
//copy算法中的 运用
copy(vInt.begin(), vInt.end(), front_insert_iterator<decltype(listInt)>(listInt));
for (auto iter = listInt.begin(); iter != listInt.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl;
//在第三个元素的位置插入元素
auto iter = listInt.begin();
int pos = 3; //获取位置
while (--pos)
{
++iter;
}
//获取插入迭代器
auto iIter = insert_iterator<decltype(listInt)>(listInt,iter);
*iIter = 35;
for (auto iter = listInt.begin(); iter != listInt.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl;
return 0;
}
C++ STL迭代器 -- 插入迭代器
最新推荐文章于 2024-05-22 20:40:36 发布