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

关于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


C++标准函数库中80%是STL,其中广泛使用了泛性编程思想,在其中分为几大部分。 1:语言支持部分。 2:诊断部分。包含了异常处理,断言,错误代码三大方式。 3:通用工具部分。包括动态内存管理工具,日期/时间处理工具等。 4:字符串处理部分。 5:国际化部分。使用Locale和facet可以为程序提供多国际化支持,包括各种字符集,日期时间,数值货币处理的支持。 6:容器(containers)部分。STL重要部分,包含了许多数据结构,有vector(动态增加的数组),queue(队列),stack(堆栈)……甚至也包括string,它也可以看做为一种容器,并且适用所有的容器可用的方法。 7:算法(algorithms)部分。STL重要部分,包含了70多个通用算法,都是优化的效率很高的,用来控制各种容器,内建数组等。例如find可以用来在容器中查找某特定值的元素,for_each可以用来将函数应用到容器元素之上,sort用于对容器中的元素排序。 8;迭代器(iterators)STL重要组成部分,每个容器都有自己的迭代器,只有容器才可以进行访问自己的元素,它类似指针,将算法和容器中的元素联系起来。 9:数值(numerics)部分。包含了一些数学运算的功能库,对复数运算提供了支持。 10:输入输出(I/O)部分。摸版化的IOStream部分。他提供了对C++程序的支持,并且对原有的iostream兼容。 所以,总体看来,C++标准函数库,包含的10大块内容中,STL主要包含了四个部分,迭代器,容器,算法。和额外的一个字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值