11.2进代子类回 只有第一类容器能用迭代子遍历。表115给出各种不同容器所支持的 迭代子类别。标准库定义的各种迭代子可进行的操作参见表116, 容器 支持的迭代子类别 顺序容器 vector 随机访问( random access) deque 随机访问( random access) 双向( bidirection) 关联容器 双向( bidirection) multiset 双向( bidirection) 双向( bidirection) murman 双向( bidirection) 容器适配器 不支持迭代子 ueue 不支持迭代子 priority q 不支持迭代子
11.2 迭代子类 只有第一类容器能用迭代子遍历。表11.5给出各种不同容器所支持的 迭代子类别。标准库定义的各种迭代子可进行的操作参见表11.6, 容器 支持的迭代子类别 顺序容器 vector deque list 随机访问(random access) 随机访问(random access) 双向(bidirection) 关联容器 set multiset map multimap 双向(bidirection) 双向(bidirection) 双向(bidirection) 双向(bidirection) 容器适配器 stack queue priority_queue 不支持迭代子 不支持迭代子 不支持迭代子
11.2选代子类 下面结合fndO算法讨论迭代子与泛型算法的关系。fndO定义 如下 template<typename InputIterator, typenameT> InputIterator find(InputIterator first, InputIterator last, count T value t for(first!=last; ++first if(value==*first) return firsti return last 可见,泛型算法不直接访问容器的元素,与容器无关。元素的全 部访问和遍历都通过迭代子实现。并不需要预知容器类型。fnd 算法也支持系统内置的数组类型 四P四
11.2 迭代子类 下面结合find()算法讨论迭代子与泛型算法的关系。find()定义 如下: template<typename InputIterator,typename T > InputIterator find(InputIterator first, InputIterator last,count T value ){ for(;first!=last;++first) if(value==*first) return first; return last } 可见,泛型算法不直接访问容器的元素,与容器无关。元素的全 部访问和遍历都通过迭代子实现。并不需要预知容器类型。find() 算法也支持系统内置的数组类型:
11.2选代子类 【例11.1】寻找数组元素 #include<algorithm> #include<iostream> using namespace std void minot int search_value, ia[9]=[47, 29, 37,23, 11, 7,5, 31, 413i cout<<"请输入需搜索的数:"<<endl cin>>search value: int* presult=find ( &ia[o], &ia[9], search_value) cout<<"数值"<< search value<<( presult==&ia[9]?”不存在":"存 在")<<endl } 这里a[9]数组元素并不存在,但内存地址单元存在
11.2 迭代子类 【例11.1】寻找数组元素。 #include<algorithm> #include<iostream> using namespace std; void main(){ int search_value,ia[9]={47,29,37,23,11,7,5,31,41}; cout<<"请输入需搜索的数:"<<endl; cin>>search_value; int* presult=find(&ia[0],&ia[9],search_value); cout<<"数值"<<search_value<<(presult==&ia[9] ?"不存在":"存 在")<<endl; } 这里a[9]数组元素并不存在,但内存地址单元存在
11.2选代子类四回 【例11.2】寻找 vector容器元素 #include<algorithm> include<vector> #include<iostream> using namespace stdF void main(i int search_ value, ia[9]=<47, 29, 37,23, 11, 7,5,31, 41] vector<int> vec(ia, ia+9); /数据填入 vector cout<<"请输入需搜索的数:"<<endl cin>>search valuei vector<int>::iterator presult /定义迭代子 presult=find(vec begin, vec. endo search_value); cout<<"数值"<< search value<<( presult== vec. end(?"不存在 ":"存在")<<end
11.2 迭代子类 【例11.2】寻找vector容器元素。 #include<algorithm> #include<vector> #include<iostream> using namespace std; void main(){ int search_value,ia[9]={47,29,37,23,11,7,5,31,41}; vector<int> vec(ia,ia+9); //数据填入vector cout<<"请输入需搜索的数:"<<endl; cin>>search_value; vector<int>::iterator presult; //定义迭代子 presult=find(vec.begin(),vec.end(),search_value); cout<<"数值"<<search_value<<(presult==vec.end() ?"不存在 ":"存在")<<endl; }
11.2选代子类 在< iterator>头文件中还定义了一些专用迭代子: 反转迭代子( reverse iterator); 插入型迭代子( insertion iterator); 流迭代子( stream iterator); 流缓冲选代子( stream buffer iterator); 四P四
11.2 迭代子类 在<iterator>头文件中还定义了一些专用迭代子: 反转迭代子(reverse iterator); 插入型迭代子(insertion iterator); 流迭代子(stream iterator); 流缓冲迭代子(stream buffer iterator);