现在的位置: 首页 > 综合 > 正文

第十一章 泛型算法

2013年07月30日 ⁄ 综合 ⁄ 共 1778字 ⁄ 字号 评论关闭

11.1 概述

算法永远不执行容器提供的操作

提供了超过100个算法

11.2 初窥算法

1) 头文件

#include<algorithm>

#include<numeric>

 

#include<iterator>//一般如果使用这样的东西:back_inserter
等等…..

2) 一些例子

 

find(vec.begin(),vec.end(),search_value);

find_first_of(vec1.begin(),vec1.end(),  vec2.begin(),vec2.end());//在范围1中查找第一个与范围2匹配的元素

accumulate(vec.begin(),vec.end(),43);

fill(vec.begin(),vec.end(),0);

copy(list.begin(),list.end(),back_inserter(ivec));

replace(list.begin(),list.end(),0,43);//0-à43

 

去掉重复:

sort(vec.begin(),vec.end());

vector<string>::iterator
end_unique=unique(words.begin,words.end());

words.erase(end_unique,words.end());

 

统计字数少于6个的单词数:

bool GT6(const string&s)

{

         return
s.size()>=6

}

vector<string> :: size_type wc=count_if(words.begin(),words.end(),GT6);

 

3) 一些心得

这些算法都是对迭代器进行操作,而不直接对容器本身进行添加和删除操作.如果想添加或者删除,那么合适的迭代器是一个很好的选择

11.3 再谈迭代器

1) 插入迭代器

back_inserter 使用push_back

front_inserter 使用 push_front  对象序列将以反序出现在目标容器中

inserter 使用的时候决定在哪插入 使用insert

 

例子1:

vector<int> vec;//注意这个时候没有初始化

fill_n(back_inserter(vec),10,0);

 

例子2:

list <int> :: iterator it =
find(list.begin(),list,end(),43);

replace_copy(ivec.begin(),ivec.end(),inserter(ilst,it),100,0);//注意这里inserter是两个参数

 

2) iostream 迭代器

 

istream_iterator  用于读取输入流

ostream_iterator  用于写输入流

 

构造函数:

istream_iterator<T> in(strm);//创建从输入流 strm读取T类型的对象

isteram_iterator<T> in;//istream_iterator对象的超出末端迭代器

ostream_iterator<T> in(strm);//写入strm

ostream_iterator<T> in(strm,delim);//创建从T类型输入到strm类型的对象,delim是分隔符,strm是以空字符结束的字符串数组

 

例子1,cin读入的int直接保存如vec.

istream_iterator<int> in_iter(cin);

istream_iterator<int> eof;//这个东西就是一个空的,

 

while(in_iter != eof)

{

         vec.push_back(*in_iter++);

}

 

这个程序可以重写成这个样子

istream_iterator <string>
in_iter(cin);

istream_iterator<int> eof;

vector<int> vec(in_iter,eof);//in_itereof的意思

 

例子2

ostream_iterator<string> out_iter(cout,”/n”);

istream_iterator<string> in_iter(cin),eof;

while(in_iter != eof)

{

         *out_iter++=*in_iter++;

}

 

抱歉!评论已关闭.