`
cppmule
  • 浏览: 437708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

使用C++标准库来提高编程效率

阅读更多

使用C++标准库来提高编程效率

 

    在C语言中几乎所有的数据结构都需要自己去实现甚至最常用的链表,队列等。。。,在中国很多程序员都是在Windows下成长起来的,很多程序员都习惯于使用非语言标准的集合类,入MFC中的CArray CList CStringArray … 如下图

 

 

在现代的C++编程理念中很强调使用类库, B.J多次强调不应增加太多的语言特性来解决问题(C++语言特性已经够多了够复杂了,要不然现在很多人都又回到C的怀抱啦),而是需要提供更好的类库来解决。

 

我们应该养成使用C++标准库的习惯,这也是人类从工程学科积累下来的经验,这些经过了千锤百炼的类库无论是性能和跨平台都做了最好的权衡。为每一个应用造一个轮子不仅效率地下,而且在短的时间内你造的轮子不一定好用(bug…)我们不要做“不要重复发明轮子”的“英雄”。纵观其他行业,如计算机硬件,武器工业等。。。都体现了这一思想。如:很多国家,都通过某一优良的坦克或汽车底盘。派生出很多类别的作战车辆。有侦察型。防空型。维修型。这也体现了重用的思想。战舰也是这样的,战舰的船体(包括动力系统,操控系统…)。以这一种成熟的船体来模块化的组合在上层的不同的武器系统便可以承担不同的作战任务。有防空型,反潜行。反舰型。。。我们也要有这种思想。也不多扯淡了下面演示使用C++ 标准库给我们带来的好处,这里只举一个使用STL和传统方式的对比来体现使用 STL 方便之处。更多的STL使用方式可以参考《C++标准库手册》。

简单的例子:

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

#ifndef _countof
#define _countof(array) (sizeof(array)/sizeof(array[0]))
#endif

using namespace std;

void demonstrate_traditionary()
{
  string strs1[] = {
    "Hello", 
    "Long", 
    "Time", 
    "No",
    "See",
  };
  string strs2[_countof(strs1)];

  //Copy strs1 to strs2
  for (int i=0; i<_countof(strs1); i++) {
    strs2[i] = strs1[i];
  }

  //Compares strs1 and strs2
  bool isEqual = false;
  for (int i=0; i<_countof(strs1); i++) {
    if (strs1[i] == strs2[i]) {
      isEqual = true;
      break;
    }
  }

  if (isEqual) {
    cout << "strs1 == strs2" << endl;
  } else {
    cout << "strs1 != strs2" << endl;
  }

  for (int i=0; i<_countof(strs2); i++) {
    string::size_type len = strs2[i].length();
    for (string::size_type n=0; n<len; n++) {
      strs2[i][n] = toupper(strs2[i][n]);
    }
  }

  for (int i=0; i<_countof(strs2); i++) {
    cout << strs2[i] << "\t";
  }
  cout << endl;
}

void demonstrate_modern()
{
  vector<string> strs1;

  strs1.push_back("Hello");
  strs1.push_back("Long");
  strs1.push_back("Time");
  strs1.push_back("No");
  strs1.push_back("See");

  vector<string> strs2;
  //Copy strs1 to strs2
  strs2.resize(strs1.size());
  copy(strs1.begin(), strs1.end(), strs2.begin());
  //Compares strs1 and strs2
  if (equal(strs1.begin(), strs1.end(), strs2.begin())) {
    cout << "strs1 == strs2" << endl;
  } else {
    cout << "strs1 != strs2" << endl;
  }
  struct StringToUpper {
    void operator() (string& str) { transform(str.begin(), str.end(), str.begin(), toupper); }
  };
  for_each(strs2.begin(), strs2.end(), StringToUpper());
  copy(strs2.begin(), strs2.end(), ostream_iterator<string>(cout, "\t"));
  cout << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
  demonstrate_traditionary();
  demonstrate_modern();
  return 0;
}

 

 

 

 运行结果:



 

 

  • 大小: 28 KB
  • 大小: 31 KB
分享到:
评论
16 楼 cppmule 2010-11-28  
不清楚你说标准库复杂的原因?能解释一下么?apache APR 的优势在什么地方?
15 楼 rasonyang 2010-11-25  
基本不用C++,只用C,库也基本只用Apache APR。
C++对于我来说,太复杂,控制不了
14 楼 夜神月 2010-11-24  
c++对库和代码重用的概念很淡薄
13 楼 sunzixun 2010-11-20  
同一界面不是搞笑么

微软是白痴么?
12 楼 xuby 2010-11-14  
rubynroll 写道
xuby 写道
C++应该吸纳 Qt 作为标准。
一个现代的系统级语言,怎么可以连个界面库都没有。


界面库就算了吧,口味难统一。

你可以选择任何口味,只要这种口味是Qt。
11 楼 angel243fly 2010-11-11  
很少使用标准库
10 楼 rubynroll 2010-11-11  
xuby 写道
C++应该吸纳 Qt 作为标准。
一个现代的系统级语言,怎么可以连个界面库都没有。


界面库就算了吧,口味难统一。
9 楼 xuby 2010-11-10  
C++应该吸纳 Qt 作为标准。
一个现代的系统级语言,怎么可以连个界面库都没有。
8 楼 thinkx 2010-11-10  
ray_linn 写道
thinkx 写道
C++的标准库几乎就相当于java.util和java.io及java.lang的一部分。
对于高级特性很少,而且标准化极慢。
所以用C++就要和N多第三方的库打交道,或者干脆自己写。



C++的标准库只能用“操蛋”来评价,而那么多繁杂的库我只喜欢两个,boost和QT,一个补强筋骨,一个强化容颜。


其他就等专业使用再说吧(比如ACE之类的和Windows下各种SDK一样,用的时候看吧)


boost太大了,各种库质量也大不相同,有些很棒,有些很蛋疼。
C++各种编译器之间也无法做到二进制兼容,导致很多类似plugin的实现只能使用C兼容接口,话说现在越来越觉得,C比C++更纯粹点。

7 楼 ray_linn 2010-11-10  
thinkx 写道
C++的标准库几乎就相当于java.util和java.io及java.lang的一部分。
对于高级特性很少,而且标准化极慢。
所以用C++就要和N多第三方的库打交道,或者干脆自己写。



C++的标准库只能用“操蛋”来评价,而那么多繁杂的库我只喜欢两个,boost和QT,一个补强筋骨,一个强化容颜。


其他就等专业使用再说吧(比如ACE之类的和Windows下各种SDK一样,用的时候看吧)
6 楼 thinkx 2010-11-10  
C++的标准库几乎就相当于java.util和java.io及java.lang的一部分。
对于高级特性很少,而且标准化极慢。
所以用C++就要和N多第三方的库打交道,或者干脆自己写。
5 楼 mathgl 2010-11-10  
ray_linn 写道
mathgl 写道
ray_linn 写道
C++标准库整个就是贫血库...怎么用???


所以这才是boost,还有0x的来由..

要是std 啥都有,怕就没有其他一堆奇怪的库的事了...



一个卖有Thread,也卖有regex的库,几乎马上就让人瀑布汗。。。选择boost,应该可以加分哈。

MongoDB就是建设在boost之上的


Kyoto cabinet也是。。只要支持 tr1的编译器都可以编译。这样跨平台变成了可能。我用vs2010可以编译 和运行 kyoto cabinet。原来的tokyo据我所知是不能在win下用的。。

从这一点来看。一个完备的库对于用户来说是很有吸引力的。

没错,c++是自由,可以随意选择需要的库,,但是,有些时候自由反而是个麻烦事,特别是在维护非自己的代码时,
见过有同时使用apr 和 zthread的,这种自由不一定是好事。


实际上,我更倾向于 python这种 battery included的库,这样在不用借助太多的关联下可以完成任务。这一点来说boost还有些缺乏...
4 楼 cppmule 2010-11-10  
“这种什么都没有”也给了我们更多的选择。C++的库比比皆是。你可以去发现。C++就是这么的自由。无论是GUI, 通讯,XML, Thread你的选择方案很多。
QT, wxWitgets, WTL, GTK+, MFC, ACE, SOCKET++....太多了。
boost::thread, ZThread
3 楼 ray_linn 2010-11-10  
mathgl 写道
ray_linn 写道
C++标准库整个就是贫血库...怎么用???


所以这才是boost,还有0x的来由..

要是std 啥都有,怕就没有其他一堆奇怪的库的事了...



一个卖有Thread,也卖有regex的库,几乎马上就让人瀑布汗。。。选择boost,应该可以加分哈。

MongoDB就是建设在boost之上的
2 楼 mathgl 2010-11-10  
ray_linn 写道
C++标准库整个就是贫血库...怎么用???


所以这才是boost,还有0x的来由..

要是std 啥都有,怕就没有其他一堆奇怪的库的事了...
1 楼 ray_linn 2010-11-10  
C++标准库整个就是贫血库...怎么用???

相关推荐

    C++标准库介绍.pdf

    标准c库大全:C++标准库介绍 疯狂代码 http://CrazyCoder.cn/ ĵ:http:/CrazyCoder.cn/VC/Article12860.html  标准库中提供了C基本设施虽然C标准库随着C标准折腾了许多年直到标准出台才正式定型但是在标准库实 现上...

    C++ 中 Windows 编程概述

    和一组特定于 Windows 的库,但 C++ 标准库和第三方 C++ 库可用于任何应用程序。 本部分讨论如何使用 Visual Studio 和 MFC/ATL 包装器库创建 Windows 程序。 有关 Windows 平台本身的文档,请参阅 Windows 文档。 ...

    C++开源程序库 C++开源程序库

    Qt实际上使用的并不是标准的C++,而是标准C++的一个扩展。它通过元对象模型扩展,实现了著名的signal/slot机制,而这一机制也成为Qt的最大特色和优势。 与Qt类似的可移植GUI框架还有wxWidget、FOX等。 3、分布式...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    Exceptional C++中文版

    全书共分8章,包括范型程序设计与C++标准库、异常安全性的问题与技术、类的设计与继承、编译器防火墙和Pimpl惯用法、名字查找名字空间和接口规则、内存管理、误区陷阱以及错误的惯用法等。本书内容深入,论证严谨,...

    Accelerated C++源代码

    这些年来,C++语言的发展方向以及C++程序员的关注点,已经从以往注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广泛可用,我们现在能够比以往任何时候更高效地学习和使用C++。本书这一版本...

    C++Prime(中文版第4版)

    本书全面介绍了 C++ 语言。...注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广 泛可用,我们现在能够比以往任何时候更高效地学习和使用 C++。本书这一版本 充分体现了这一点。

    Accelerated C++ PDF 中英文版

    这些年来,C++语言的发展方向以及C++程序员的关注点,已经从以往注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广泛可用,我们现在能够比以往任何时候更高效地学习和使用C++。本书这一版本...

    C++Primer 中文第四版(pdf高清完整版).

    本书全面介绍了 C++ 语言。...注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广 泛可用,我们现在能够比以往任何时候更高效地学习和使用 C++。本书这一版本 充分体现了这一点。

    C++ Boost Thread 编程

    然而今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务服务器在单独的线程上运行服务程序;GUI应用程序将那些费时,复杂的处理以线程的形式单独运行,以此来保证用户...

    高质量c/c++编程设计

    【规则1-2-2】用 #include &lt;filename.h&gt; 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 【规则1-2-3】用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)...

    C++Primer 入门书

    本书全面介绍了 C++ 语言。...注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广 泛可用,我们现在能够比以往任何时候更高效地学习和使用 C++。本书这一版本 充分体现了这一点。

    深入理解C++11:C++11新特性解析与应用 pdf

    不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新语言特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。《华章科技:深入理解C++11:C++11新特性解析与应用》一共8章...

    c++ primer 4th 中英文对照版

    这些年来,C++ 语言的发展方向以及 C++ 程序员的关注点,已经从以往注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广泛可用,我们现在能够比以往任何时候更高效地学习和使用 C++。本书这一...

    C++Primer第四版中文版

    本书全面介绍了 C++ 语言。...注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广 泛可用,我们现在能够比以往任何时候更高效地学习和使用 C++。本书这一版本 充分体现了这一点。

    <<C++STL中文版>>

    STL(标准模板库)是在惠普实验室中开发的,已纳入ANSI/ISO C++标准。其中的代码采用模板类及模板函数的方式,可以极大地提高编程效率。本书由P.J. Plauger等四位对C++ STL的实现有着卓越贡献的大师撰写,详细讨论了...

    C++编程思想习题

    18.3.6 用模板来使用RTTI 18.4引用 18.5多重继承 18.6合理使用RTTI 18.7RTTI的机制及花费 18.8创建我们自己的RTTI 18.9新的映射语法 18.9.1staticcast 18.9.2constcast 18.9.3reinterpret_cast 18.10小结 18.11练习...

    c++入门经典

    本书全面介绍了 C++ 语言。...注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广 泛可用,我们现在能够比以往任何时候更高效地学习和使用 C++。本书这一版本 充分体现了这一点。

    深入理解C++11:C++11新特性解析与应用

    不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新语言特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。 《华章科技:深入理解C++11:C++11新特性解析与应用》一共8...

Global site tag (gtag.js) - Google Analytics