STL实用入门教程(1)----学习

来源:互联网 发布:手机恶意软件排行 编辑:程序博客网 时间:2024/04/30 14:55

关于STL,对于在什么情况下应该使用哪个容器和算法都感到比较茫然

一、什么是STL,使用STL的好处;

二、STL的string类型的使用方法。


STL的简介:

STL(StandardTemplate Library,标准模板库)

STL的代码从广义上讲分为三类:container(容器)即是数据结构中的结构,如队列,栈等、iterator(迭代器)和algorithm(算法),容器和算法通过迭代器可以进行无缝地连接。
string,wstring也是STL的一部分。


使用STL的好处:
1、STL是C++的一部分,因此不用额外安装什麽,它被内建在你的编译器之内。
2、STL的一个重要特点是数据结构和算法的分离。
3、STL具有高可重用性,高性能,高移植性,跨平台的优点。
4、不用思考STL具体的实现过程,只要能够熟练使用STL就OK了

怎么开始学习STL呢:
先学习比较基础的一部分,string。

string讲解纲要:
string是什么
string与char*的比较
string使用之前的准备
string的构造函数
string的存取字符操作
从string取得const char*的操作
把string拷贝到char*指向的空间的操作
string的长度
string的赋值
string的连接
string的比较
string的子串
string的查找
string的插入
string的删除
string的替换
string与wstring的区别
string与wstring的转换
编码统一化,编写单一源代码

stringchar*的比较:
string是一个类,char*是一个指向字符的指针。

string封装了char*,管理这个字符串,是一个char*型的容器。

string不用考虑内存释放和越界。

 string管理char*所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。

string支持运算。
string提供了一系列的字符串操作函数,查找find,拷贝copy,删除erase、替换replace,插入insert,等等


string是对char*的管理,一个字符只占一个字节大小。一个汉字占两个字节,ASCII编码。
wstring是对wchar_t*的管理,一个字符占两个字节大小,一个汉字占两个字节,Unicode编码。

string与wstring的转换:
²第一种方法

   调用Windows的API函数:WideCharToMultiByte()函数和MultiByteToWideChar()函数。

第二种方法

   使用ATL的CA2W类与CW2A类。或使用A2W宏与W2A宏。

第三种方法,跨平台的方法,使用CRT库的mbstowcs()函数和wcstombs()函数,需设定locale。
以下是第三种方法的实现例子。

#include<string>

#include<locale.h>

usingnamespace std;

//wstring转成string

stringws2s(const wstring &ws)

{

stringcurLocale = setlocale(LC_ALL,NULL); //curLocale="C";

setlocale(LC_ALL,"chs");

constwchar_t * _Source=ws.c_str();

size_t_Dsize=2*ws.size()+1;

char* _Dest = new char[_Dsize];

memset(_Dest,0,_Dsize);

wcstombs(_Dest,_Source,_Dsize);

stringresult = _Dest;

delete[]_Dest;

setlocale(LC_ALL,curLocale.c_str());

returnresult;

}


//string转成wstring

wstrings2ws(const string &s)

{

stringcurLocale = setlocale(LC_ALL,NULL);   //curLocale = "C"

setlocale(LC_ALL,"chs");

constchar *_Source = s.c_str();

size_t_Dsize = s.size()+1;

wchar_t*_Dest = new wchar_t[_Dsize];

wmemset(_Dest,0,_Dsize);

mbstowcs(_Dest,_Source,_Dsize);

wstringresult = _Dest;

delete[]_Dest;

setlocale(LC_ALL,curLocale.c_str());

returnresult;

}


编码统一化,编写单一源代码:
如果我们想建立两个版本的程序,一个处理ASCII字符串,另一个处理Unicode字符串,最好的解决办法是编写出既能按ASCII编译又能按Unicode编译的单一源代码。把以下代码加入到程序中,只要修改一个宏就能满足我们的要求。

#ifdef_UNICODE

typedefwstring  tstring;

typedefwchar_t  tchar;

#define_T(x)  L ## x

#else

typedefstring tstring;

typedefchar tchar;

#define_T(x) x

#endif


原创粉丝点击