std和stl的关系

Posted huangfuyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std和stl的关系相关的知识,希望对你有一定的参考价值。

【前言】有点疑惑,在写程序时。为甚么引入了头文件.h还要在加上using namespace std?例如:

1 #include<iostream>
2 using namespace std;//他的作用?cout不应该在头文件里面定义的函数吗?
3 int main(0
4 {
5      cout<<"你好"6      return 07 }

  下面就介绍一下,为什么在引用了iostream头文件的情况下,想使用cout,还要加上std命名空间。

一、std和stl的关系

  stl是标准模板库,是标准库的子集。主要是容器、算法、迭代器三个方面,几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。标准模板库里面没有string,但是他在标准库里面,用来输入一个字符串类型。

  STD是命名空间的名字,目的是为了避免命名空间污染。模板库(包括stl)的设计者,特意在库文件加上了命名空间。这样,我们使用者就可以在定义自己的函数时,定义自己的命名空间。然后在自己命名空间范围内引用重名的函数。

二、实现自己的库函数和命名空间

  一个注意点,标准编码风格要求接口和实现分离。头文件包含命名空间的定义类、变量、函数、模板和其他命名空间。源文件包含命名空间成员的定义部分。

 1 //myfile.h
 2 #include<string>
 3 namespace my_std{
 4     class sales_data{/*各种函数的声明*/};
 5 }
 6 
 7 //myfile.cc
 8 #include"myfile.h"         
 9 namespace my_std{
10   //sales_data类中函数的实现
11 }
12 
13 //main.cc
14 #include"myfile.h"          //若想在main.cc文件加头文件,如iostream,最好加在引入的文件之前
15 int main()
16 {
17     using my_std::sales_data;
18     sales_data data1,data2;
19     //...
20     return 0;
21 }

    由上可以看出,基于接口实现分离。要在.h和.cc文件中加上namespace。这样的话,就可以在main文件中引入命名空间,在一定作用域下使用特定的函数。

三、在标准库里实战分析

      

以上是关于std和stl的关系的主要内容,如果未能解决你的问题,请参考以下文章

STL容器自定义内存分配器

STL容器自定义内存分配器

比给定值最小的最大元素的 STL 算法

C++ stl 集合或链表

C++标准库与STL的关系

为啥 std::distance 在 stl 地图中被击中?