`
cppmule
  • 浏览: 446383 次
  • 性别: 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++标准库都是不可或缺的支持。通过理解这些...

    C++编程基础标准库编程

    本资料包“C++编程基础标准库编程”聚焦于C++中的STL使用,包括了ISO镜像文件以及相关代码示例,旨在帮助初学者深入理解和掌握这一关键领域。 1. **C++简介**: C++是一种通用的、面向对象的编程语言,由Bjarne ...

    c++标准库电子书

    掌握C++标准库对于提高编程效率至关重要。 ### 输入输出流 在C++中,`iostream`头文件定义了基本的输入输出流对象,如`cin`、`cout`。此外,`fstream`提供了文件输入输出的支持,如`ifstream`、`ofstream`等。这些...

    C++标准库(pdf)

    《C++标准库》这本书不仅全面覆盖了C++标准库的知识体系,还提供了丰富的实践案例,非常适合有一定C++基础的学习者作为参考书使用。通过对本书的学习,读者不仅可以掌握标准库的基本用法,还能深入了解其背后的原理...

    C++ 标准库 中文 高清 (2020最新带书签)

    C++标准库是C++编程语言的核心组成部分,它提供了一系列预先定义的数据结构、函数和算法,使得程序员可以高效地编写...通过深入学习和熟练掌握C++标准库,开发者可以充分利用C++的强大功能,提高编程效率和代码质量。

    C++标准模板库编程实战

    总之,《C++标准模板库编程实战》是一本全面而深入的教程,适合有一定C++基础并希望提升STL使用技巧的开发者。它将引导读者探索C++14的新特性,以及如何有效地利用STL来设计和实现高效、可维护的程序。无论是新手...

    C++标准库chm

    总的来说,"C++标准库chm"是一个非常有用的参考资料,对于学习和使用C++标准库的开发者来说,它提供了便捷的查询工具和详尽的说明,有助于提升编程技能和效率。通过阅读和实践CHM文件中的内容,开发者可以更好地掌握...

    C++标准库第二版

    总之,《C++标准库第二版》是C++开发者不可或缺的参考资料,它深入浅出地介绍了C++11的新特性,并详细讲解了STL的使用和多线程编程,帮助读者掌握现代C++的精髓,提升编程技能。通过阅读和实践书中的例子,开发者...

    C++标准库(第二版) 学习C++11的好书

    STL是C++标准库的核心部分,它提供了一组高效的数据结构和算法,极大地提高了C++程序的开发效率。通过学习STL,开发者可以更好地掌握C++的模板机制,并能编写出高效、模块化的代码。 《C++标准库(第二版)》这本书...

    超越c++标准库——boost程序库导论

    总的来说,《超越C++标准库——Boost程序库导论》这本书详尽地介绍了Boost库的各种组件及其用法,是深入理解C++和提升编程效率的重要资源。通过学习和应用Boost,开发者不仅可以提高代码质量和性能,还能掌握更多...

    C/C++标准库手册 简体中文

    通过《C/C++标准库手册》,开发者可以系统地学习和掌握这些内容,从而更好地利用标准库来解决问题,提高代码的可读性和可维护性。同时,理解和熟练运用标准库能避免重复造轮子,减少错误,提高程序的可靠性。因此,...

    C++标准库 C++标准库

    C++标准库是C++编程语言的核心组成部分,它提供了一系列预先定义好的函数、类和对象,使得程序员能够高效地编写程序。C++标准库不仅包括了C语言的标准库...学习并熟练运用C++标准库,能够显著提升C++编程的效率和质量。

    C++标准库,中文版的小MSDN

    "中文版的小MSDN"虽然可能没有涵盖C++的所有细节,但它对于理解和使用C++标准库来说已经非常有价值。开发者可以通过查阅这个文档,快速找到所需的标准库功能,并了解其使用方法。在实际编程中,熟练掌握并合理运用...

    C++标准库及后补全集

    使用这本书,开发者不仅可以深入理解C++标准库的各项功能,还能了解到如何有效地利用这些工具来优化代码、提高程序性能。无论是初学者还是经验丰富的C++开发者,都能从中受益匪浅,尤其是在面对大型项目或需要高性能...

    超越c++标准库 - boost程序库导论

    《超越C++标准库 - Boost程序库导论》是一本深度探讨C++编程技术的书籍,专注于Boost库的使用和理解。Boost库是C++社区广泛认可的一套开源库,它扩展了C++的标准库,提供了许多高效、高质量的工具和组件,用于解决...

    C++元编程和Boost编程库

    Boost库是C++标准库以外的一个广泛使用的、跨平台的、开源的编程库集合,它包含了一系列以Boost命名的C++库。这些库覆盖了各个领域,包括字符串处理、泛型编程、并发编程等。在元编程方面,Boost库提供了元编程库...

Global site tag (gtag.js) - Google Analytics