第32课 - 初探C++ 标准库

第32课 - 初探C++ 标准库

1. 有趣的重载

  操作符 << 的原生意义是按位左移,例: 1  <<  2 ;

  其意义是将整数 1 按位左移 2 位,即: 0000 0001   ->    0000 0100

  重载左移操作符,将变量或常量左移到一个对象中!

 1 #include <stdio.h>
 2
 3 const char endl = ‘\n‘;
 4
 5 class Console
 6 {
 7 public:
 8     Console& operator << (int i)
 9     {
10           printf("%d", i);
11           return *this;
12     }
13
14         Console& operator << (char c)
15     {
16           printf("%c", c);
17           return *this;
18     }
19
20     Console& operator << (const char* s)
21     {
22           printf("%s", s);
23           return *this;
24     }
25
26         Console& operator << (double d)
27     {
28           printf("%f", d);
29           return *this;
30     }
31 };
32
33 Console cout;
34
35 int main()
36 {
37     cout << 1 << endl;               //1
38     cout << "Hello World!" << endl;  //Hello World!
39
40     double a = 0.1;
41     double b = 0.2;
42
43     cout << a + b << endl;          //0.300000
44
45     return 0;
46 }

重载左移操作符(仿cout类)  //这个例子很微妙,需要仔细揣摩体会

2. C++ 标准库

  重复发明轮子并不是一件有创造性的事情,站在巨人的肩膀上解决问题会更加有效!

  (1)C++ 标准库并不是C++ 语言的一部分

  (2)C++ 标准库是由 类库 和 函数库 组成的集合

  (3)C++ 标准库中定义的类和对象都位于 std 命名空间中

  (4)C++ 标准库的头文件都不带 .h 后缀

  (5)C++ 标准库涵盖了 C 库的功能

3. C/C++库

3.1 C++ 编译环境的组成

  (1)C语言兼容库:头文件带.h,是C++编译器厂商推广自己的产品,而提供的C兼容库(不是C++标准库提供的,也不是C库提供的

  (2)C++ 标准库:如string、cstdio(注意,不带.h)是C++标准库提供的。使用时要用using namespace std找开命名空间

  (3)C++标准库中的C库和 C语言兼容库 在功能上相同,但是两者隶属于不同的模块,使用的头文件不同

  (4)不同厂商提供的C++编译器,C++ 扩展语法模块和编译器扩展模块各不相同

3.2 C++ 标准库预定义的常用数据结构

  (1)常用的数据结构类:<bitset>、<set>、<deque>、<stack>、<list>、<vector>、<queue>、<map>

  (2)<cstdio>、<cstring>、<cstdlib>、<cmath> (C++标准库提供的C兼容库!

 1 /*
 2 //C++编译商提供的C兼容库(既不是C++标准库提供的,也不是C语言库文件,而是一种兼容库)
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <stdlib.h>
 6 #include <math.h>
 7 */
 8
 9 //C++标准库提供的C兼容库
10 #include <cstdio>
11 #include <cstring>
12 #include <cstdlib>
13 #include <cmath>
14
15 using namespace std; //位于std命名空间中
16
17 int main()
18 {
19     //以下的代码是使用C++标准库提供的C兼容库写的,
20     //从形式上看,与C代码写的完全一样,这就是C++
21     //为C提供了很好的支持的例子!
22     printf("hello world!\n");
23
24     char* p = (char*)malloc(16);
25
26     strcpy(p, "");
27
28     double a = 3;
29     double b = 4;
30     double c = sqrt(a * a + b * b);
31
32     printf("c = %f\n", c);
33
34     free(p);
35
36     return 0;
37 }

C++标准库中的C库兼容(如cstdio)

4. C++输入输出

  

 1 #include <iostream> //使用C++标准库的输入输出
 2 #include <cmath>
 3
 4 using namespace std; //位于std命名空间中
 5
 6 int main()
 7 {
 8     cout << "Hello world!" << endl;
 9
10     double a = 0;
11     double b = 0;
12
13     cout <<"Input a:";
14     cin >> a;
15
16     cout <<"Input b:";
17     cin >> b;
18
19     double c = sqrt(a * a + b * b);
20
21     cout << "c = "<< c << endl;
22
23     return 0;
24 }

C++中的输入输出

5. 小结

  (1)C++ 标准库是由 类库函数库 组成的集合

  (2)C++ 标准库包含经经典算法  数据结构 的实现

  (3)C++ 标准库涵盖了C库的功能

  (4)C++ 标准库位于 std 命名空间中

时间: 2024-10-24 05:14:02

第32课 - 初探C++ 标准库的相关文章

c++标准库多线程入门

从c++ 11开始,语言核心和标准库开始引入了对多线程的原生支持.如下所示: int doSth(char c) { default_random_engine dre(c); uniform_int_distribution<int> id(10,10000); for(int i=0;i<10;i++) { this_thread::sleep_for(chrono::milliseconds(id(dre))); cout.put(c).flush(); } return c; }

把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin

在64位Ubuntu14.04LTS上编译和链接32位汇编程序(使用c标准库)需要如何配置配置环境

1.安装32位c标准库libc6:i386 aptitude install libc6:i386 2.安装gcc-4.8-multilib sudo aptitude install gcc-4.8-multilib 版权声明:本文为博主原创文章,未经博主允许不得转载.

c++多线程编程:实现标准库accumulate函数的并行计算版本

今天使用c++实现了标准库头文件<numeric>中的accumulate函数的并行计算版本,代码如下,注释写的比较详细,仅对其中几点进行描述: ①该实现假定不发生任何异常,故没有对可能产生的异常进行处理 ②第42行的语句: const unsigned int num_thread = std::min((hardware_thread != 0 ? hardware_thread : 2), max_thread); 要运行的线程数是计算出的最大线程数和硬件线程数量的较小值.这是因为若运行

(转)剖析C++标准库智能指针(std::auto_ptr)

不可否认,资源泄露(resource leak)曾经是C++程序的一大噩梦.垃圾回收 机制(Garbage Collection)一时颇受注目.然而垃圾自动回收机制并不能 满足内存管理的即时性和可视性,往往使高傲的程序设计者感到不自在. 况且,C++实现没有引入这种机制.在探索中,C++程序员创造了锋利的 "Smart Pointer".一定程度上,解决了资源泄露问题. 也许,经常的,你会写这样的代码: //x拟为class: // class x{ // public: // int

[学习笔记] Python标准库简明教程 [转]

1 操作系统接口 os 模块提供了一系列与系统交互的模块: >>> os.getcwd() # Return the current working directory '/home/minix/Documents/Note/Programming/python/lib1' >>> os.chdir('~/python') # Change current working directory Traceback (most recent call last): File

Python标准库:迭代器Itertools

Infinite Iterators: Iterator Arguments Results Example count() start, [step] start, start+step, start+2*step, ... count(10) --> 10 11 12 13 14 ... cycle() p p0, p1, ... plast, p0, p1, ... cycle('ABCD') --> A B C D A B C D ... repeat() elem [,n] elem

python标准库configparser配置解析器

1 >>> from configparser import ConfigParser, ExtendedInterpolation 2 >>> parser = ConfigParser(interpolation=ExtendedInterpolation()) 3 >>> # the default BasicInterpolation could be used as well 4 >>> parser.read_string

实现C++标准库string类的简单版本

后续待更新. 1 #ifndef STRING_H 2 #define STRING_H 3 4 #include <cassert> 5 #include <utility> 6 #include <iostream> 7 8 namespace jz 9 { 10 11 /************************************************************************/ 12 /* 重新实现C风格字符串处理函数 */