template<class InputIterator, class Type>
InputIterator find(
InputIterator _First,
InputIterator _Last,
const Type& _Val
);查找成功返回指向Val的迭代器,失败返回一个越界的迭代器_Last
所以检查是否和_Last相等就可以判断是否找到
find(beg,end,val)// 查找失败返回end
count(beg,end,val)//返回val出现的次数的计数
accumulate(beg,end,val);包含在<numeric>头文件中,beg和end是两个迭代器,表示的是范围,val是一个初值,表示beg和end中的元素相加后加上val
例如:int sum=accumulate(vec.begin(),vec.end(),42); 表示vec中的元素之和加上42.
fill(beg,end,val)在beg和end中间写入val 只会对输入范围内已存在的元素进行写入操作
fill_n(beg,count,val)从beg开始写入count个val, 不检查写入操作的算法,不安全,
back_inserter(vec)包含在<iterator>中,在vec容器中插入。创建使用push_back实现插入操作的容器。
和fill_n结合使用的例子
fill_n(back_inserter(vec),10,.0)在vec中插入10个0,相当于vector中的push_back();
front_inserter()使用push_front实现插入
inserter()使用insert实现插入操作,除了所关联的容器外,inserter还带有第二个实参,指向插入起始位置的迭代器。
unique(beg,end)去除掉重复的元素,(没有删除)返回的迭代器指向超出无重复的元素范围末端的下一位置。空间大小没变化,只是把相邻的元素覆盖掉了
vector<string>vec;
string str="fox jumps over quick red red slow the the turtle";
string word;
istringstream stream(str);
while(stream>>word)
{
vec.push_back(word);
}
vector<string>::iterator end_unique=unique(vec.begin(),vec.end());
//将无重复的元素复制到序列的前端,相邻的元素被覆盖掉,
vec.erase(end_unique,vec.end());
replace(beg,end,val1,val2)查找等于val1的替换为val2.
replace_copy(beg,end,vec,val1,val2) 查找等于val1的替换为val2.插入vec中,而不修改beg到end中间的值,
template<class InputIterator, class OutputIterator, class Type>
OutputIterator replace_copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
const Type& _OldVal,
const Type& _NewVal
);
template<class InputIterator, class OutputIterator>
OutputIterator copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _DestBeg
);
template<class InputIterator, class OutputIterator>
OutputIterator unique_copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result
);
template<class InputIterator, class OutputIterator, class BinaryPredicate>
OutputIterator unique_copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
BinaryPredicate _Comp,
);
利用copy算法将一个文件的内容写到标准输出中
ofstream outfile;
string filename="C:\\Users\\Administrator\\Desktop\\file.txt";
ifstream inf(filename.c_str()) ;
istream_iterator<string>infile(inf),end_file;
outfile.open(filename.c_str(),ios_base::app);
ostream_iterator<string>output(cout,":\t\n ");
copy(infile,end_file,output);