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

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

  下面就介绍一下,为什么在引用了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文件中引入命名空间,在一定作用域下使用特定的函数。

三、在标准库里实战分析

标准库与上面的代码组织结构类似。但是我看的VS的STL版本中的头文件是木有.h的,他的声明和定义是在一起的也叫标准头文件。在vs里面看一下标准库源码(iostream和stl里的vector)。看来分不分离也各有个的使用者吧!我感觉分开更明晰一些!

主程序:

 1 #include<iostream>
2 #include<vector>
3 using namespace std;
4 int main()
5 {
6 std::vector<int> as;
7 cout<<"a";
8 getchar();
9 return 0;
10 }

1、先看iostream的:

  

  宏定义了std,下面所有声明实现都在命名空间std之下。

  2、再看vector的:

   

标准的c++11没有.h和.cc之分,转到声明和定义都是同一个文件。头文件及其实现都在vector里面。

  我们看到两个标准头文件里面都有共同的命名空间,所以命名空间可以是不连续的。

std和stl的关系的更多相关文章

  1. C++标准库简介、与STL的关系。

    转自http://www.cnblogs.com/xiongjiaji/archive/2011/06/22/2476490.html C++标准库的所有头文件都没有扩展名.C++标准库的内容总共在5 ...

  2. std(标准库)和STL(标准模板库)的关系

    C++标准库的内容分为10类: C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串 C6.容器 C7.迭代器支持 C8.算法 C9.数值操作 C10.本地化: 下面分类详解: ...

  3. c++标准库和stl关系

    C++标准库的所有头文件都没有扩展名.C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能. <cname>形式的标准头文件[ <complex>例外]其 ...

  4. [技术] OIer的STL入门教程

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

  5. [技术] OIer的C++标准库 : STL入门

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

  6. STL视频_01

    ZC:这里视频里面有一个调试小技巧,VS08/VS2010开始,控制台程序会自动退出(不像VC6),那么可以在 函数退出的最后一句语句上设置断点,然后查看控制台打印出来的信息.ZC:这一讲,给我的感觉 ...

  7. C++ STL 概述_严丝合缝的合作者们

    1. 初识 STL 什么是STL? STL(Standard Template Library) 是C++以模板形式提供的一套标准库,提供了很多开发过程需要的通用功能模块.使用 STL ,可以让开发者 ...

  8. STL中map与hash_map容器的选择收藏

    这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...

  9. STL 序列容器

    转自时习之 STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这里介绍STL中的各种序 ...

随机推荐

  1. idea2018 快捷键

    Alt+Enter将光标放到缺少包的错误提示处自动导入包Ctrl+Alt+Space光标处会有会出现界面提示需要补全的信息也可以在new完对象后使用.var后将会自动补 Ctrl+O可以选择父类的方法 ...

  2. 简谈图论重要性&&图论总结

    从外地学习回来,我对图论才有认识(以前就没接触过,非常尴尬),说实话,学好图论的重要性,就像学数学时在进行解析几何时,图极有可能是打开答案的最后秘钥,也就是数形结合,而懂的人永远明白,用图解决绝对比用 ...

  3. 吉哥系列故事——完美队形II(马拉车算法)

    吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求 ...

  4. POJ1142 Smith Numbers 暴力+分解质因子

    题意:题目定义了一个史密斯数,这个数的定义是:一个合数的各个位置上加起来的和等于它的素因数所有位置上的数字加起来的和.比如: 4937775=3∗5∗5∗658374+9+3+7+7+7+5=3+5+ ...

  5. codeforces 1037E-Trips 【构造】

    题目:戳这里 题意:n个点,每天早上会在这n个点中加一条边,每天晚上最大的子图满足子图中每个点都有k条或以上的边. 解题思路:看了官方题解,先把所有的点都连上,再从最后一天往前减边,用set维护最大的 ...

  6. Linux POSIX共享内存方法&ipcs &struct shmid_ds

    内容是主进程创建子进程计算斐波那契数列. 其中计算到第几项是有主进程命令行输入. 共享内存段,并且查看了一些信息. 参考操作系统概念第七版 3.10,3.11 关于LINUX C库函数 中的 fpri ...

  7. 攻防世界-Web-lottery(.git泄露、php源码审计、弱类型利用)

    扫描目录,发现.git泄露: 提取.git泄露的源码,得到许多文件: 网站这里: 这就要审计一下代码,找找漏洞了. 经过一番审计,猜数字对应的函数在api.php中: 我们要绕过这个$win_numb ...

  8. HHVM的全称是"HipHop for PHP",开放源代码。采用PHP许可证授权!

    http://hhvm.com/ https://github.com/xgqfrms/hhvm 什么是HHVM高性能服务器? HHVM是由Facebook公司出品的高性能开源服务器,用来执行hack ...

  9. 前端架构模式 All In One

    前端架构模式 All In One 架构模式 同构 异构 微前端 Web Components 组件化 无框架 去框架 前后端分离 前端架构图 Clean Architecture https://b ...

  10. Android 如何使用 WebView 加载 HTML 字符串和处理转译字符

    Android 如何使用 WebView 加载 HTML 字符串和处理转译字符 css bug 在 WebView 中编译 Web 应用 如果您希望在客户端应用中提供 Web 应用(或只是网页),则可 ...