200 likes | 450 Vues
The C++ Standard Template Library. C++ 标准模板库. 什么是 STL ?. STL 是 C++ 标准模板库的简称,主要包括一些通用的容器库和算法库。 STL 利用最先进的 C++ 模板技术编写而成,也即泛型编程技术,具有方便,通用,可靠,高效的特点。 STL 具有跨平台特性,任何支持标准 C++ 的编译器,都支持 STL 。. STL 介绍次序. 模板技术简介 容器库简介 算法库简介 STL 编程思想总结. 模板技术简介. 函数模板: template<typename/class T…>
E N D
The C++ Standard Template Library C++标准模板库
什么是STL? • STL是C++标准模板库的简称,主要包括一些通用的容器库和算法库。 • STL利用最先进的C++模板技术编写而成,也即泛型编程技术,具有方便,通用,可靠,高效的特点。 • STL具有跨平台特性,任何支持标准C++的编译器,都支持STL。
STL介绍次序 • 模板技术简介 • 容器库简介 • 算法库简介 • STL编程思想总结
模板技术简介 • 函数模板: template<typename/class T…> return_type fun_name(parameter list…) • 类模板: template<typename/class T..> class/struct/union class_name { ……………….. };
模板举例 • 模板函数 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;
模板类 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
STL容器库 • <string> 通用字符串库 • <vector> 通用向量(数组)库 • <list> 通用链表库 • <set> 通用集合库 • <map> 通用字典库
std::string • string&wstring • string是一个处理字符串数据的类,支持变长字符串,支持随机存取。 • wstring接口同string相同,只是其处理的是宽字符(wchar_t)数据。 • typedef base_string<char> string • typedef base_string<wchar_t> wstring
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());
std::vector • vector 是一个变长一维数组模板类,同内建数组一样,支持随机存取。 • vcetor<T>::iterator vector<T>::const_iterator 是访问vector的迭代器。
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); • } • };
std::list • list是一个通用的双向链表模板类,支持任意位置的数据读写,插入和删除操作。 • 对list的访问主要通过迭代器实现。 • list<T>::iterator • list<T>::const_iterator
std::list应用 • //保存汉字知识库的链表 • list<ChnWordKwg> l_cwkwg • // 指示当前正在处理的汉字知识 • list<ChnWordKwg>::iterator current; • for( list<ChnWordKwg>::iterator iter= l_cwkwg.begin();iter!= l_cwkwg.end();iter++) {……}
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; • }
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; • }
STL算法库 • STL算法库包含了一系列常用的算法模板函数,函数对象,以及对STL容器库的一些操作,如排序,插入,删除,查找,统计等。 • 例子: vector<int> v_int; v_int.push_back(…); … sort(v_int.begin(),v_int.end());
STL综合实例 • 将给出一个包括常用容器和算法的实例 • 见stl_case.cpp • 与STL_EXAMPLE.exe
STL编程思想总结 • 充分挖掘GP编程的潜力 比如:bind2nd()函数配接器 • 将OOP与GP编程结合 比如:iterator • 完善的存储管理体系,支持用户自定义存储方式 比如:namespace std { template <class T, class Allocator = allocator<T> > class vector; }
STL学习心得 • 了解C++和模板的基础知识 • 在应用中多使用STL • 了解STL的内部机制 • 掌握核心编程思想