<b>STL简介</b>[VC/C++编程]
本文“<b>STL简介</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
前言
本篇文章是作者本人利用STL 后的一些见解, 对於想要靠此文章学习STL, 是不大概的. 倡议叁背面介绍的一些书入门.
STL的概念
在STL 中, 大至上分三个主要的功效. 辨别是collect class, (比方 vector ,list , .....), 算法部份(如sort ,find ...), 最是一些工具(如auto_ptr , make_pair ....), 此中以collect class 和算法部份最为重要.
STL 利用一种称作 iterator (中文有人翻作泛型指标) 的资料范例来衔接collect class 和算法部份. 为了到达可以反复利用算法和collect class. 在STL 中把这些东西更进一步抽象化. 因此STL订义了一堆抽象化的行为称作concept. 您可以想像concept 是在阐明一些行为. 只要某一个型别合乎concept 中阐明的行为. 就说此范例具有此concept.
举例阐明, 若有concept C1,C2. 算法A1, A2. 资料范例D1 具有C1 的行为,D2 有C1,C2.
如A1 要求需求具有C1 的型别. 则任何一个有C1 的资料范例都可以给A1 利用. 在此例中有D1和D2.
如A2 要求具有C1跟C2的型别. 在此只有D2 可以给A2 利用.
STL 利用抽象化的行为定义且实作它们, 来到达算法和资料范例的反复利用.
iterator 在STL 中是很重要的一个概念, iterator 和C 的point 很相, 但他不是指标(note 在某一些情况下iterator 是以C 的point 来实作). 他供应近似point 的功效, 如 '++' 运算表示把iterator 移到下一个element , '*' 运算表示存取iterator 目前指向的element (在此利用'指向'并非很好). 操纵iterator 你可以走访整个collect 中存放的内容.
举个例子阐明iteraotr 的功效吧.
vector 是STL 中众多的collect class 中的一种. vector 供应begin() 和end() 这类的member function 来获得vector 中第一个element 的iterator, 和最后一个element的下一个element. 您可以这样利用:
std::vector<int> vtInt;
vtInt.push_back(1);
...
.. // 假定对vtInt 做了很多差别的动做, 如push_back ...
std::vector<int>::iterator itBegin=vtInt.begin();
std::vector<int>::iterator itEnd=vtInt.end();
for( ; itBegin != itEnd ;++itBegin) // 走访itBegin 到 itEnd 不含itEnd 之间的全部element
{
int x=*itBegin; // 获得itBegin 指向的资料
*itBegin = .... ; // 存放资猜测itBegin 指向的资料
}
由此例中iterator 有和C point 近似的功效.
机乎全部的STL 的算法城市要求输入的资料是itearot 如sort 算法, 要求输入两个iterator , 然后把这两个iterator 之间的资料加以排序. 介由引进iterator , sort 可以排序的东西就变多了.
利用典范
I. 在STL 中利用尺度输出. Say Hello
#include <iostream> // STL 的输入输出包含档. 在STL 中都没有利用.h or .hpp 等副档名
int main(int argc,char* argv[])
{
std::cout << "Hello!! This is STL " << std::endl; // 利用stl 的尺度输出, std 是STL 的namespace 所以要这样用std::cout
return 0;
}
II. 从尺度输入读入字串, 排序后再输出
#include <iostream> // STL 的输入输出包含档
#include <algorithm> // STL 的算法包含档
#include <string> // STL 的字串
#include <vector> // STL 的一个collect class 这是一个像阵列的class
const int d_nReadLine=5;
int main(int argc,char* argv[])
{
std::vector<std::string> vtString; // 宣布一个字串vector
std::string strTemp; // 宣布一个字串
for( int i = 0 ; i < d_nReadLine ; i++) // 读取d_nReadLine 个字串并将后果存到vtString 中
{
std::cin >> strTemp; // 读入字串
vtString.push_back(strTemp); // 将读入的字串存到vtString 的最背面
}
std::sort(vtString.begin(),vtString.end()); // 将vtString 中得资料sort
std::copy(vtString.begin(),vtString.end(),
std::ostream_iterator<std::string>(std::cout," ")); // 将vtString 中得资料输出
return 0;
}
note :
std::sort 和std::copy 都是STL 供应的算法.
参考书籍
泛型程式计划与STL, Generic Programming and the STL. Matthew H. Austern 着, 侯捷/黄俊尧 译
以上是“<b>STL简介</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |