DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 101|回复: 0
打印 上一主题 下一主题

C++ STL的概念及举例

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-28 15:15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本篇文章是作者本人使用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 vtInt;
  vtInt.push_back(1);
  ...
  .. // 假设对vtInt 做了很多不同的动做, 如push_back ...
  std::vector::iterator itBegin=vtInt.begin();
  std::vector::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 // STL 的输入输出包含档. 在STL 中都没有使用.h or .hpp 等副档名
  int main(int argc,char* argv[])
  {
  std::cout // STL 的输入输出包含档
  #include // STL 的算法包含档
  #include // STL 的字串
  #include // STL 的一个collect class 这是一个像阵列的class
  const int d_nReadLine=5;
  int main(int argc,char* argv[])
  {
  std::vector vtString; // 宣告一个字串vector
  std::string strTemp; // 宣告一个字串
  for( int i = 0 ; i > strTemp; // 读入字串
  vtString.push_back(strTemp); // 将读入的字串存到vtString 的最后面
  }
  std::sort(vtString.begin(),vtString.end()); // 将vtString 中得资料sort
  std::copy(vtString.begin(),vtString.end(),
  std:stream_iterator(std::cout," ")); // 将vtString 中得资料输出
  return 0;
  }
  note :
  std::sort 和std::copy 都是STL 提供的算法.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2026-3-25 19:54 , 耗时 0.093001 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表