浅谈c++ 标准模板库

来源:互联网 发布:informix数据库安装 编辑:程序博客网 时间:2024/06/07 18:49

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());


0 0
原创粉丝点击