当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

走近STL[VC/C++编程]

赞助商链接



  本文“走近STL[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

本文面向的读者:学习过C++程序计划语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了.

什么是泛型程序计划

我们可以简单的理解为:利用模板的程序计划就是泛型程序计划.就像我们我们可以简单的理解面向对象程序计划就是利用虚函数的程序计划一样.

STL是什么

作为一个C++程序计划者,STL是一种不可轻忽的技术.Sandard Template Library (STL):

尺度模板库,更精确的说是 C++ 程序计划语言尺度模板库.学习过MFC的人知道,MFC是微软公司成立的 C++ 类库.而与之近似的是 STL 是模板库,只不过 STL 是 ANSI/ISO 尺度的一部份,而 MFC 只不过是微软的一个产品罢了.也就是说STL是全部C++编译器和全部操作系统平台都支持的一种库,说它是一种库是因为,固然STL是一种尺度,也就是说对全部的编译器来说,供应应C++程序计划者的接口都是一样的.也就是说同一段STL代码在差别编译器和操作系统平台上运行的后果都是相同的,但是底层实现可以是差别的. 令人高兴的是,STL的利用者并不需求理解它的底层实现. 试想一下,假如我们有一把能翻开全部锁的钥匙,那将是多么令人猖獗啊.嘎嘎.这个歪梦我做了20多年鸟.

STL的目的是尺度化组件,这样你就不用重新开辟它们了.你可以仅仅利用这些现成的组件.STL目前是C++的一部份,因此不用额外安装什么.它被内建在你的编译器之内.

为什么我们需求学习STL

STL是 C++的ANSI/ISO 尺度的一部份,可以用于全部C++语言编译器和全部平台(Windows/Unix/Linux..).STL的同一版本在肆意硬件配置下都是可用的;
STL 供应了大量的可复用软件组织.比方,程序员再也不用自己计划排序,搜索算法了,这些都已经是STL的一部份了.嘎嘎,有意思吧;
利用STL 的利用程序保证了得到的实目前处理速度和内存操纵方面都是高效的,因为STL计划者们已经为我们考虑好了;
利用STL编写的代码更简单改正和阅读,这是当然的鸟.因为代码更短了,很多底子工作代码已经被组件化了;
利用简单,固然内部实现很复杂;
  固然,STL的长处甚多,但是STL的语法实在令初学者人头疼,很多人望而却步.但是STL是每个C++程序计划者早晚都要啃的一块骨头.因为越来越多的C++代码是用STL编写的,看不懂麻烦就大鸟.越来越多的人在用STL,不懂就无法和别人一同合作了.功德多磨嘛,早点学习早点摆脱.
  下面让我们来看几段代码吧:(你认为头疼就不要看了)

//stl_cpp_1.cpp
#include <iostream>
double mean(double *array, size_t n)
{
  double m=0;
  for(size_t i=0; i<n; ++i){
    m += array[i];
  }
  return m/n;
}
int main(void)
{
  double a[] = {1, 2, 3, 4, 5};
  std::cout<<mean(a, 5)<<std::endl;  // will print 3
  return 0;
}
好懂吧,除了那个std有点让人不舒服以外?这是一段普通的没有利用STL的C++代码.再看下面一段:
//stl_cpp_2.cpp
#include <vector>
#include <iostream>
int main(void)
{
  std::vector<double> a;
  std::vector<double>::const_iterator i;
  a.push_back(1);
  a.push_back(2);
  a.push_back(3);
  a.push_back(4);
  a.push_back(5);
  for(i=a.begin(); i!=a.end(); ++i){
    std::cout<<(*i)<<std::endl;
  }
  return 0;
}
  假如你真的没有接触过STL的话,你会问,呀,vector 是啥呀?我会奉告你,那是一排美女.嘎嘎.这可不是个比方,表想歪鸟.这是一段纯种的STL代码,看到尖括号了吧,知道那是模板了吧.看到a.push_back(5),a.begin(),a.end()你不感受奇特么?但是我们并没有定义这些函数啊.
//stl_cpp_3.cpp
#include <vector>
#include <iostream>
int main(void)
{
  std::vector<int> q;
  q.push_back(10);
  q.push_back(11);
  q.push_back(12);
  std::vector<int> v;
  for(int i=0; i<5; ++i){
    v.push_back(i);
  }
  std::vector<int>::iterator it = v.begin() + 1;
  it = v.insert(it, 33);
  v.insert(it, q.begin(), q.end());
  it = v.begin() + 3;
  v.insert(it, 3, -1);
  it = v.begin() + 4;
  v.erase(it);
  it = v.begin() + 1;
  v.erase(it, it + 4);
  v.clear();
  return 0;
}
  这一段你又看到了新东西了吧,iterator???不罗嗦了,等你看完这篇文章,回头再看就简单了.在正式介绍STL之前,我们需求花点时间来理解一下模板和命名空间.
  关于模板的其他细节,读者可以参阅《C++ Templates 中文版》(有点费头脑哦).在这里,我只简单的介绍一下模板类和函数模板的概念.

模板是C++中实现代码重用机制的一种工具,可以实现范例参数化,把范例定义为参数.函数模板和类模板答应用户构造模板函数和模板类.

图1


  以上是“走近STL[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 走近STL
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .