插入迭代器
front_inserter(c)//list、deque
back_inserter(c)//vector、list、deque
inserter(c,c_iter)//在c的c_iter处插入
因为iostream迭代器不支持--,所以不支持反向迭代器
const迭代器
不可修改迭代器所指元素值,比如只是想读出元素,即可用const迭代器
输入迭代器 读,只支持++ istream_iterator
输出迭代器 写,只支持++ ostream_iterator
前向迭代器 读和写,只支持++
双向迭代器 读和写,支持++、-- map、set、list
随机访问迭代器 读和写,支持完整的迭代器算术运算++、--、+、-、+=、-= etc. vector、deque、string、数组
front_inserter(c)//list、deque
back_inserter(c)//vector、list、deque
inserter(c,c_iter)//在c的c_iter处插入
front_inserter
copy(c.begin(),c.end(),front_inserter/back_inserter(insert_container));
back_inserter
fill_n(back_inserter(iVec),10,1);
inserter
replace_copy(iVec.begin(),iVec.end(),inserter(iLst.begin,iterPosition),0,999);
iostream迭代器
//istream_iterator
istream_iterator<int> bindIter(cin),endIter;
//vector<int> iVec;
//while (bindIter != endIter)
//{
// iVec.push_back(*bindIter++);
//}
//or
vector<int> iVec(bindIter,endIter);
//ostream_iterator
ostream_iterator<int> output(cout,"\t");
unique_copy(iVec.begin(),iVec.end(),output);
//综合使用
//读入cin中int,偶数放入文件outFileOdd,奇数放入文件outFileEven
istream_iterator<int> inBindIter(cin),inEndIter;
ofstream outFileEven,outFileOdd;
outFileEven.open("outFileEven.txt");
outFileOdd.open("outFileOdd.txt");
if (! outFileEven || ! outFileOdd)
{
cerr<<"outFile error!"<<endl;
return -1;
}
ostream_iterator<int> outBindIterEven(outFileEven,"\t"),outBindIterOdd(outFileOdd,"\t");
while (inBindIter != inEndIter)
{
if (*inBindIter % 2 == 0)
{
*outBindIterEven++=*inBindIter++;
}
else
{
*outBindIterOdd++=*inBindIter++;
}
}
outFileEven.close();
outFileOdd.close();
反向迭代器
因为iostream迭代器不支持--,所以不支持反向迭代器
const迭代器
不可修改迭代器所指元素值,比如只是想读出元素,即可用const迭代器
总结
5种迭代器输入迭代器 读,只支持++ istream_iterator
输出迭代器 写,只支持++ ostream_iterator
前向迭代器 读和写,只支持++
双向迭代器 读和写,支持++、-- map、set、list
随机访问迭代器 读和写,支持完整的迭代器算术运算++、--、+、-、+=、-= etc. vector、deque、string、数组