《项目中STL的使用》由会员分享,可在线阅读,更多相关《项目中STL的使用(21页珍藏版)》请在金锄头文库上搜索。
1、C+项目中项目中STL的使用的使用Click to add TitleX排序排序选参照选参照选邻近选邻近4个点个点/天天 * 5天天如何自动分组算法算法?界面,界面,逻辑逻辑?自动分组结果要求:从标准输入设备(键盘)读入一些整型数据,然后对它要求:从标准输入设备(键盘)读入一些整型数据,然后对它们进行排序,最终将结果输出到标准输出设备(显示器)。们进行排序,最终将结果输出到标准输出设备(显示器)。 输入-排序-输出(传统实现)无循环无循环输入-排序-输出(STL实现)STL: Standard Template Library。常用数据结构与算法的集合。常用数据结构与算法的集合。1998年,年
2、,STL成为成为C+标准库的一部分。标准库的一部分。STL是什么是什么VCGCCBCBAlexander Stepanov(STL之父之父)70年代,思想年代,思想1987,继承,继承1998,标准,标准现在现在 ,java .net泛型泛型msvcr80.dllmsvcp80.dllmfc80u.dllSTL的历史及实现版本顺序容器顺序容器1关联容器关联容器21)vector : 动态增长数组。动态增长数组。2)list: 双向链表。双向链表。3)deque:类似:类似vector,两端增删效率高,两端增删效率高1)set 键集合。键集合。黑名单黑名单2)map 键值对集合。键值对集合。英文
3、词典英文词典建议建议1:用:用vector代替传统数组!代替传统数组! 适配器容器适配器容器31) queue, stack, priority_queue 用别的容器适配而成。用别的容器适配而成。查找快查找快STL容器容器比较初始化初始化1插入与删除插入与删除2大小与位置大小与位置3遍历遍历4容器常用操作set与map1list2c.remove(val) /移除所有值为移除所有值为val的元素的元素c.unique() /移除重复元素移除重复元素c.sort() /排序排序c.reverse(); /将元素反序将元素反序 容器特殊操作vector deque listsetmultiset
4、mapmultimapstack queuepriority_queue随机随机随机随机双向双向双向双向双向双向不支持不支持1. 不同容器上支持的迭代器不同容器上支持的迭代器功能强弱有所不同。功能强弱有所不同。2. 容器的迭代器的功能强弱,容器的迭代器的功能强弱,决定了该容器是否支持决定了该容器是否支持STL中中的某种算法。的某种算法。例:排序算法例:排序算法-随机随机 Reverse算法算法双向双向只读只读只写只写读写,前向读写,前向读写,双向读写,双向读写,随机读写,随机迭代子Insert iterator1Stream iterator2Reverse Iterator3概念:提供概念:
5、提供iterator相同的接口,但是改变内部的实现方法相同的接口,但是改变内部的实现方法1) back_inserter2) front_inserter3) inserter1) istream_iterator2) ostream_iterator1) vector:reverse_iteratorHeadTailbeginrbeginrendend迭代子适配器迭代子适配器#include #include 查找查找(13个个)排序整序排序整序(14个个)删除替换删除替换(15个个)排列组合排列组合(2个个)算术算术(4个个)生生成成异异变(6个个)关系关系(8个个)集合集合(4个个)堆堆
6、(4个个)70个标准算法个标准算法标准算法13个,如个,如何选择何选择?查找算法建议建议2:用算法代替循环!:用算法代替循环!7个,如何选择个,如何选择?排序算法标准库中预定义函数对象1#include 1)算术函数对象算术函数对象2)关系函数对象关系函数对象3)逻辑函数对象逻辑函数对象自定义函数对象2?1)姓名查姓名查找找2)成绩排成绩排前三前三函数对象一元函一元函数对象数对象二元二元函数函数对象对象建议建议3:用函数对象代替函数指针!:用函数对象代替函数指针!自定义函数对象string常用常用成员函数成员函数substr length find rfindfind_first_of erase还缺少什么?送代码:strutil.h cpp建议建议4:用:用string代替代替char*CString与string如何转化?界面层使用CString业务层使用stringstring, stream网站:网站:http:/