1 / 20

The C++ Standard Template Library

The C++ Standard Template Library. C++ 标准模板库. 什么是 STL ?. STL 是 C++ 标准模板库的简称,主要包括一些通用的容器库和算法库。 STL 利用最先进的 C++ 模板技术编写而成,也即泛型编程技术,具有方便,通用,可靠,高效的特点。 STL 具有跨平台特性,任何支持标准 C++ 的编译器,都支持 STL 。. STL 介绍次序. 模板技术简介 容器库简介 算法库简介 STL 编程思想总结. 模板技术简介. 函数模板: template<typename/class T…>

satin
Télécharger la présentation

The C++ Standard Template Library

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The C++ Standard Template Library C++标准模板库

  2. 什么是STL? • STL是C++标准模板库的简称,主要包括一些通用的容器库和算法库。 • STL利用最先进的C++模板技术编写而成,也即泛型编程技术,具有方便,通用,可靠,高效的特点。 • STL具有跨平台特性,任何支持标准C++的编译器,都支持STL。

  3. STL介绍次序 • 模板技术简介 • 容器库简介 • 算法库简介 • STL编程思想总结

  4. 模板技术简介 • 函数模板: template<typename/class T…> return_type fun_name(parameter list…) • 类模板: template<typename/class T..> class/struct/union class_name { ……………….. };

  5. 模板举例 • 模板函数 template<typename T> T max(T a,T b) { return a>b?a:b; } int x=10,y=15; std::cout<<max<int>(x,y)<<std::endl;

  6. 模板类 template<class T> class complex { public: complex(){} complex(T &re,T &im):real(re),imag(im){} friend ostream &operator<<(ostreram &o, const complex<T> &c) { o<<real<<‘+’<<imag<<‘i’; return o; } private: T real; T imag; }; complex<int> c1(1,3);//1+3i complex<float> c2(2.5,3.7);//2.5+3.7i

  7. STL容器库 • <string> 通用字符串库 • <vector> 通用向量(数组)库 • <list> 通用链表库 • <set> 通用集合库 • <map> 通用字典库

  8. std::string • string&wstring • string是一个处理字符串数据的类,支持变长字符串,支持随机存取。 • wstring接口同string相同,只是其处理的是宽字符(wchar_t)数据。 • typedef base_string<char> string • typedef base_string<wchar_t> wstring

  9. std::string应用 • string str_bc(xls_sheet1->Cell(i,j*2+2)->GetString());//0.75,10,0.64,14 • int s=0; • int e=str_bc.find_first_of(','); • string num=str_bc.substr(0,e); • wkwg.v_bsctrl[j].xscroll=atof(num.c_str()); • s=e+1; • e=str_bc.find_first_of(',',s); • num=str_bc.substr(s,e-s); • wkwg.v_bsctrl[j].xoffset=atoi(num.c_str()); • s=e+1; • e=str_bc.find_first_of(',',s); • num=str_bc.substr(s,e-s); • wkwg.v_bsctrl[j].yscroll=atof(num.c_str()); • s=e+1; • num=str_bc.substr(s,str_bc.length()-s); • wkwg.v_bsctrl[j].yoffset=atoi(num.c_str());

  10. std::vector • vector 是一个变长一维数组模板类,同内建数组一样,支持随机存取。 • vcetor<T>::iterator vector<T>::const_iterator 是访问vector的迭代器。

  11. std::vector应用 • struct ChnWordKwg • { • unsigned word_id; • vector<BaseID> v_bsid; • vector<BaseCtrl> v_bsctrl; • ChnWordKwg(int bsc) • { • word_id=0; • v_bsid.resize(bsc); • v_bsctrl.resize(bsc); • } • };

  12. std::list • list是一个通用的双向链表模板类,支持任意位置的数据读写,插入和删除操作。 • 对list的访问主要通过迭代器实现。 • list<T>::iterator • list<T>::const_iterator

  13. std::list应用 • //保存汉字知识库的链表 • list<ChnWordKwg> l_cwkwg • // 指示当前正在处理的汉字知识 • list<ChnWordKwg>::iterator current; • for( list<ChnWordKwg>::iterator iter= l_cwkwg.begin();iter!= l_cwkwg.end();iter++) {……}

  14. std::set • set或multiset是一个按用户指定排序规则将set内的数据进行排序的集合库,set内不允许有相同的数据,而multiset允许有重复数据。 • namespace std { • template <class T, class Compare = less<T>, class Allocator = allocator<T> > class set; • template <class T, class Compare = less<T>, class Allocator = allocator<T> > class multiset; • }

  15. std::map • map或multimap是一个字典模板类,其索引可以是任意用户指定类型。且能按用户指定排序规则将map内的数据进行排序的集合库,map内不允许有相同的数据,而multimap允许有重复数据。 • namespace std { • template <class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key,T> > > • class map; • template <class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key,T> > > • class multimap; • }

  16. STL算法库 • STL算法库包含了一系列常用的算法模板函数,函数对象,以及对STL容器库的一些操作,如排序,插入,删除,查找,统计等。 • 例子: vector<int> v_int; v_int.push_back(…); … sort(v_int.begin(),v_int.end());

  17. STL综合实例 • 将给出一个包括常用容器和算法的实例 • 见stl_case.cpp • 与STL_EXAMPLE.exe

  18. STL编程思想总结 • 充分挖掘GP编程的潜力 比如:bind2nd()函数配接器 • 将OOP与GP编程结合 比如:iterator • 完善的存储管理体系,支持用户自定义存储方式 比如:namespace std { template <class T, class Allocator = allocator<T> > class vector; }

  19. STL学习心得 • 了解C++和模板的基础知识 • 在应用中多使用STL • 了解STL的内部机制 • 掌握核心编程思想

  20. 谢谢!

More Related