STL是C++标准模板库的简称,主要包括一些通用的容器库和算法库。
STL利用最先进的C++模板技术编写而成,也即泛型编程技术,具有方便,通用,可靠,高效的特点。
STL具有跨平台特性,任何支持标准C++的编译器,都支持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> 通用字典库
1.std::string
string&wstring
string是一个处理字符串数据的类,支持变长字符串,支持随机存取。
wstring接口同string相同,只是其处理的是宽字符(wchar_t)数据。
typedef base_string<char> string
typedef base_string<wchar_t> wstring
应用:
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());
2.std::vector
vector 是一个变长一维数组模板类,同内建数组一样,支持随机存取。
vcetor<T>::iterator
vector<T>::const_iterator
是访问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);
}
};
3.std::list
list是一个通用的双向链表模板类,支持任意位置的数据读写,插入和删除操作。
对list的访问主要通过迭代器实现。
list<T>::iterator
list<T>::const_iterator
应用:
//保存汉字知识库的链表
list<ChnWordKwg> l_cwkwg
// 指示当前正在处理的汉字知识
list<ChnWordKwg>::iterator current;
for( list<ChnWordKwg>::iterator iter= l_cwkwg.begin();iter!= l_cwkwg.end();iter++)
{……}
4.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;
}
5.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容器库的一些操作,如排序,插入,删除,查找,统计等。
例子:
vector<int> v_int;
v_int.push_back(…);
…
sort(v_int.begin(),v_int.end());