登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

图像处理 视频分析 机器视觉 模式识别

方向比努力更重要

 
 
 

日志

 
 
关于我

河北软件开发项目,电子警察卡口项目,公安天网项目,媒体流处理,数字图像处理。媒体服务器 RTSP、图像处理、车牌识别……DCT变换,H.264压缩

linux下STL是Standard Template Library  

2011-07-25 16:09:01|  分类: gcc|make |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

参考:http://blog.csdn.net/hexiankun/article/details/3260876

0 摘要


一直流传这么一个说法,想成为高手,一定要多读高手写的源代码。哪些代码是好材料呢?C++标准库的源代码?不,如果您读过,就会发现:要么是各种实现独 有的表达方式让人摸不着头脑,要么是恐怖的代码风格(如到处是下划线)憋得人难受。Boost库的代码则相当清晰,注释合理,命名规范,绝对是适合阅读的 典范。同时,Boost内容广泛,数值计算、泛型编程、元编程、平台API……不妨从容选择自己感兴趣的部分,细细品味。

在本文中,我们将会介绍了Boost库的下载与安装,并将体验Boost库中一个非常简单实用的组件lexcial_cast。

1 Boost简介


Boost是什么?一套开放源代码、高度可移植的C++库。

谁发起的?C++标准委员会库工作组。所以,质量保证,不怕遇到假冒伪劣产品。

有些什么呢?瞧瞧:

  • 正则表达式,可以与POSIX API和Perl语言处理正则表达式的功能相媲美,而且还能支持各种字符类型(如char、wchar_t,甚至还可以是自定义字符类型);
  • 多线程,想了很久的跨平台多线程库了;
  • 数据结构“图”,再加上即将加入标准的hash_set、hash_map、hash_multiset、hash_multimap等等(事实上不少STL实作,如SGI STL,已经支持以上数据结构),C++对数据结构的支持已近完备;
  • python,没错,对Python语言的支持;
  • 智能指针,与std::auto_ptr一起善加使用,可杜绝内存泄露,效率更不可和垃圾收集机制GC同日而语;
  • 更有循环冗余的CRC、可轻松定义返回多个值函数的元组tuple、可容纳不同类型值的any、对标准库各方面的补充……
  • 还在迅速扩大中,部分内容有望进入C++标准库……

2 Boost学习资源



STL是Standard Template Library的简称,也即标准模板库,是一个具有工业强度的,高效的C++程序库。有关使用库的好处自不必多说,这里大致的讲述一下STL的相关知识和如何在Linux下使用STL;

下面首先给出这几篇文章,都是介绍STL入门的极佳导学文章--

C++ STL轻松导学
STL简介
A modest STL tutorial

    看了这篇文章之后,我想你一定对STL有了一个概括性质的了解,当然,如果你感觉自己了解的仍然不够充分,你可以去这里--

STL 中文站
最优秀的STL使用学习网站
C++ Standard Template Library Overview

   获取更为详细的信息;其实网上有关STL的东西太多了,鱼龙混杂,但绝不乏精品,所以,如果你感觉看某一篇有关STL的文章实在是看不下去了,就应该考虑是不是这篇文章质量有问题,再去网上搜取合适的吧。

    我想通览了以上有关STL的信息之后,我们可以得出这样一个结论,那就是在linux下,如果要使用STL库,可选的就是这两个:Boost和SGI;

下面我们分别来作一下比较:

这是C++ Boost 库的文档索引

这是C++ SGI 库的文档索引

    经过比较,我们可以得出这样一个结论,Boost库的内容更为丰富一些;所以,如果你打算体验一下Linux下的基于STL的应用开发,可以准备从 Boost的学习开始,而且Boost的网上文档也是非常丰富的,参与Boost的开发人员甚至达到了2000多人!

    下面在Linux下编写一个基于STL的程序,测试一下;对了,现在我们也知道了Linux下默认支持的STL是SGI库,此库在Linux下性能非常不错!

这里先给出程序源代码:


#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[]){
      vector<int> int_vector;
      vector<double> double_vector;
      int_vector.push_back(99);
      int_vector.push_back(9999);
      double_vector.push_back(99.99);
      double_vector.push_back(9999.9999);
      int size;
      size = int_vector.size();
      for (int i = 0; i < size; i ++){
      cout << int_vector[i] << endl;
      }
      size = double_vector.size();
      for (int j = 0; j < size; j ++){
      cout << double_vector[j] << endl;
      }
}


    注意其中的这一句“using namespace std;”,如果没有这一句,你会遇到很多莫名其妙的问题,导致你不知所措,没办法排除错误,而实际上解决问题的关键就是这么一句话!

源码采用命令
g++ -o main main.cpp
即可编译成功;无需添加任何辅助的参数!

可能出的错误一:

In file included from /usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/backward/new.h:33,
from /usr/include/g++-3/stl_algobase.h:52,
from /usr/include/g++-3/vector:30,
from main.cpp:2:
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
In file included from /usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/backward/new.h:34,
from /usr/include/g++-3/stl_algobase.h:52,
from /usr/include/g++-3/vector:30,
from main.cpp:2:
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:82: error: declaration of `operator new' as non-function
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:82: error: `size_t' is not a member of `std'
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:82: error: expected `,' or `;' before "throw"
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:83: error: declaration of `operator new []' as non-function
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:83: error: `size_t' is not a member of `std'
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:83: error: expected `,' or `;' before "throw"
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:86: error: declaration of `operator new' as non-function
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:86: error: `size_t' is not a member of `std'
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:86: error: expected primary-expression before "const"
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:86: error: expected `,' or `;' before "throw"
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:87: error: declaration of `operator new []' as non-function
/usr/lib/gcc/i386-neoshine-linux/3.4.4/../../../../include/c++/3.4.4/new:87: error: `size_t' is not a member of `std'

    这里之列举出来部分错误提示,这种错误看上去已经很恐怖了;解决方法就是前面提到的,千万不要忘了“using namespace std;”,因为,此时,所有的标准模板库均是在std域名空间内的,因此,必需要引用此空间名称才可以使用其成员。

如果想了解更多相关信息以及详细咨询,欢迎点击中英网http://www.uker.net/,或发email至:echo@uker.net,UKer.net资深编辑将为您详细解答。

  评论这张
 
阅读(1974)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018