当前位置: 首页 > 编程日记 > 正文

c++标准库 及 命名空间std

1、命名空间std
  C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突。最典型的例子就是std命名空间C++标准库中所有标识符都包含在该命名空间中
  如果确信在程序中引用某个或者某些程序库不会引起命名冲突(即库中的标识符不会在程序中代表其他函数名称),那么可以通过using操作符来简化对程序库中标识符(通常时函数)的使用,例如:using namespace std;那么就可以不用在标识符在前缀std::来使用C++标准库库中的函数了。

<iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespacestd;这样才能正确使用cout。、

C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:

1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:

std::cout << std::hex<< 3.4<< std::endl;

2、使用using关键字。

using std::cout;
  using std::endl;

以上程序可以写成

cout << std::hex<< 3.4<< endl;

3、最方便的就是使用using namespace std;

例如:

#include <iostream>
  #include <sstream>
  #include <string>
  using namespace std;
这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:

cout << hex<< 3.4<< endl;

因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。 所以就有了<iostream.h>和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"。

比如
#include <iostream>
using namespace std;
void main()
{cout<< "hello!"<< endl;
}
如果不用using namespace std;这句,那么用如下
std::cout << "hello!"<<std::endl;

C++标准库

C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。<cname>形式的标准头文件【<complex>例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在<cname>形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。在C++中还可以使用name.h形式的标准C库头文件名。

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

C1 标准库中与语言支持功能相关的头文件 头文件  描述  
<cstddef> 定义宏NULL和offsetof,以及其他标准类型size_t和ptrdiff_t。与对应的标准C头文件的区别是,NULL是C++空指针常量的补充定义,宏offsetof接受结构或者联合类型参数,只要他们没有成员指针类型的非静态成员即可。 
<limits> 提供与基本数据类型相关的定义。例如,对于每个数值数据类型,它定义了可以表示出来的最大值和最小值以及二进制数字的位数。 
<climits> 提供与基本整数数据类型相关的C样式定义。这些信息的C++样式定义在<limits>中 
<cfloat> 提供与基本浮点型数据类型相关的C样式定义。这些信息的C++样式定义在<limits>中 
<cstdlib> 提供支持程序启动和终止的宏和函数。这个头文件还声明了许多其他杂项函数,例如搜索和排序函数,从字符串转换为数值等函数。它与对应的标准C头文件stdlib.h不同,定义了abort(void)。abort()函数还有额外的功能,它不为静态或自动对象调用析构函数,也不调用传给atexit()函数的函数。它还定义了exit()函数的额外功能,可以释放静态对象,以注册的逆序调用用atexit()注册的函数。清除并关闭所有打开的C流,把控制权返回给主机环境。 
<new> 支持动态内存分配 
<typeinfo> 支持变量在运行期间的类型标识 
<exception> 支持异常处理,这是处理程序中可能发生的错误的一种方式 
<cstdarg> 支持接受数量可变的参数的函数。即在调用函数时,可以给函数传送数量不等的数据项。它定义了宏va_arg、va_end、va_start以及va_list类型 
<csetjmp> 为C样式的非本地跳跃提供函数。这些函数在C++中不常用 
<csignal> 为中断处理提供C样式支持 

C2 支持流输入/输出的头文件 头文件  描述  
< iostream> 支持标准流cin、cout、cerr和clog的输入和输出,它还支持多字节字符标准流wcin、wcout、wcerr和wclog。 
<iomanip> 提供操纵程序,允许改变流的状态,从而改变输出的格式。 
<ios> 定义iostream的基类 
<istream> 为管理输出流缓存区的输入定义模板类 
<ostream> 为管理输出流缓存区的输出定义模板类 
<sstream> 支持字符串的流输入输出 
<fstream> 支持文件的流输入输出 
<iosfwd> 为输入输出对象提供向前的声明 
<streambuf> 支持流输入和输出的缓存 
<cstdio> 为标准流提供C样式的输入和输出 
<cwchar> 支持多字节字符的C样式输入输出 

C3 与诊断功能相关的头文件 头文件 描述 
<stdexcept> 定义标准异常。异常是处理错误的方式 
<cassert> 定义断言宏,用于检查运行期间的情形 
<cerrno> 支持C样式的错误信息 

C4 定义工具函数的头文件 头文件 描述 
<utility> 定义重载的关系运算符,简化关系运算符的写入,它还定义了pair类型,该类型是一种模板类型,可以存储一对值。这些功能在库的其他地方使用 
<functional> 定义了许多函数对象类型和支持函数对象的功能,函数对象是支持operator()()函数调用运算符的任意对象 
<memory> 给容器、管理内存的函数和auto_ptr模板类定义标准内存分配器 
<ctime> 支持系统时钟函数 

C5 支持字符串处理的头文件 头文件 描述 
<string> 为字符串类型提供支持和定义,包括单字节字符串(由char组成)的string和多字节字符串(由wchar_t组成) 
<cctype> 单字节字符类别 
<cwctype> 多字节字符类别 
<cstring> 为处理非空字节序列和内存块提供函数。这不同于对应的标准C库头文件,几个C样式字符串的一般C库函数被返回值为const和非const的函数对替代了 
<cwchar> 为处理、执行I/O和转换多字节字符序列提供函数,这不同于对应的标准C库头文件,几个多字节C样式字符串操作的 一般C库函数被返回值为const和非const的函数对替代了。 
<cstdlib> 为把单字节字符串转换为数值、在多字节字符和多字节字符串之间转换提供函数 

C6 定义容器类的模板的头文件 头文件 描述 
<vector> 定义vector序列模板,这是一个大小可以重新设置的数组类型,比普通数组更安全、更灵活 
<list> 定义list序列模板,这是一个序列的链表,常常在任意位置插入和删除元素 
<deque> 定义deque序列模板,支持在开始和结尾的高效插入和删除操作 
<queue> 为队列(先进先出)数据结构定义序列适配器queue和priority_queue 
<stack> 为堆栈(后进先出)数据结构定义序列适配器stack 
<map> map是一个关联容器类型,允许根据键值是唯一的,且按照升序存储。multimap类似于map,但键不是唯一的。 
<set> set是一个关联容器类型,用于以升序方式存储唯一值。multiset类似于set,但是值不必是唯一的。 
<bitset> 为固定长度的位序列定义bitset模板,它可以看作固定长度的紧凑型bool数组 

C7 支持迭代器的头文件 头文件 描述 
<iterator> 给迭代器提供定义和支持 

C8 有关算法的头文件 头文件 描述 
<algorithm> 提供一组基于算法的函数,包括置换、排序、合并和搜索 
<cstdlib> 声明C标准库函数bsearch()和qsort(),进行搜索和排序 
<ciso646> 允许在代码中使用and代替&& 

C9 有关数值操作的头文件 头文件 描述 
<complex> 支持复杂数值的定义和操作 
<valarray> 支持数值矢量的操作 
<numeric> 在数值序列上定义一组一般数学操作,例如accumulate和inner_product 
<cmath> 这是C数学库,其中还附加了重载函数,以支持C++约定 
<cstdlib> 提供的函数可以提取整数的绝对值,对整数进行取余数操作 

C10 有关本地化的头文件 头文件 描述 
<locale> 提供的本地化包括字符类别、排序序列以及货币和日期表示。 
<clocale> 对本地化提供C样式支持 

转载于:https://www.cnblogs.com/renyuan/archive/2013/05/30/3108626.html

相关文章:

aop point 只能获取到map嘛_面试被问了几百遍的 IoC 和 AOP ,还在傻傻搞不清楚?...

这篇文章会从下面从以下几个问题展开对 IoC & AOP 的解释什么是 IoC&#xff1f;IoC 解决了什么问题&#xff1f;IoC 和 DI 的区别&#xff1f;什么是 AOP&#xff1f;AOP 解决了什么问题&#xff1f;AOP 为什么叫做切面编程&#xff1f;首先声明&#xff1a;IoC & AOP…

HTML学习笔记_002_如何学习HTML

.htm 还是 .html 文件后缀&#xff1f; 当您保存 HTML 文件时&#xff0c;既可以使用 .htm 也可以使用 .html 文件后缀。我们在实例中使用 .htm。这只是长久以来形成的习惯而已&#xff0c;因为过去的很多软件只允许三个字母的文件后缀。 不过对于新的软件&#xff0c;使用 .ht…

设计1.0 -- iterator 和const_iterator底层的模拟实现

本文概要&#xff1a; 本文主要是模拟实现STL中迭代器和const迭代器的&#xff0c;主要阐述的一个问题就是&#xff0c;为什么我们在设计迭代器的时候需要使用三个模板参数呢 在设计迭代器的时候&#xff0c;我们有下面的代码 #include<iostream> using namespace std…

关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...

关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()答&#xff1a;缩进在程序中长度统一且强制使用同文学或同音乐主题的民歌&#xff0c;《_______》是其中之一。此曲经民间艺人丁喜才改编后&#xff0c;由上海音乐学院鞠秀芳于50年代在国际上唱红答&#xff1a;五…

使用Newtonsoft.Json

首先是前一段某博友对于循环引用的问题的解决&#xff1a;http://www.cnblogs.com/Gryzor/archive/2013/05/06/3062373.html 其次是时间到底是UTC还是Local的问题&#xff1a;http://www.cnblogs.com/leonwang/archive/2013/05/29/javascript-datetime.html 对于第二条&#xf…

回击质疑 HP StoreOnce用高性能说话

四五年以前&#xff0c;记者曾经两次参观过惠普位于英国西南部港口城市布里斯托尔的存储研究中心&#xff0c;那里是惠普数据备份和保护产品的大本营&#xff0c;同时也是惠普磁带产品与HP StoreOnce产品家族的诞生地。就在惠普刚刚发布升级版的HP StoreOnce B6200以及Catalyst…

windows10配置jenkins

1、下载pscp.exe并拷贝到c:\window\system32&#xff0c;此工具用于上传文件至linux服务器 下载地址&#xff1a;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 2、下载jenkins.war 下载地下&#xff1a;https://jenkins.io/download/ 3、设置环境变量JENKI…

STL模拟实现1.0 -- list和iterator模拟实现和简单分析

引言 C 标准模本库《STL》中有很多优秀的代码实现&#xff0c;不然怎么能叫做C标准模板库呢&#xff0c;其中一个实现就是有一个容器&#xff0c;叫做list。所谓容器其实就是存储相同类型数据的一个存储集合&#xff0c;list的底层实现其实就是一个链表。 我们的普通数组在使…

hdc mfc 画扇形图_使用echarts绘制条形图和扇形图

使用echarts绘制条形图和扇形图简单举例说明下echarts如何绘制条形图和扇形图代码示例echarts绘制条形图和扇形图var mychart1echarts.init(document.getElementById(chart1),light);// 指定图表的配置项和数据var option {title: {text: ECharts 入门示例},tooltip: {},legen…

Java学习笔记45:Java 线程与主线程之间的变量关系

运行下面的代码&#xff1a; package com.test.www;public class Test {public static int count 0;public static void inc() {//这里延迟1毫秒&#xff0c;使得结果明显try {Thread.sleep(1);} catch (InterruptedException e) {}count;}public static void main(String[] a…

会计的思考(36):会计--企业运营的数码相机

新浪网上看到一张图片&#xff0c;拍的是2009年12月3日的武汉市&#xff0c;整个城市在笼罩在一片污浊空气当中&#xff0c;让人震惊。虽然我在深圳&#xff0c;但也清楚好不到哪去。 震惊之余&#xff0c;感谢新浪&#xff0c;更感谢某位摄影师&#xff0c;让我们了解到生活的…

spring cloud连载第二篇之Spring Cloud Config

Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持。通过Spring Cloud Config你可以有一个统一的地方来管理所有应用的外部配置。 默认服务端存储实现用的是git&#xff0c;因此&#xff0c;它很容易支持配置环境的标签版本&#xff0c;…

CodeOnly

关于设置[Key]标志 要先添加 程序集的引用 在添加 using System.ComponentModel.DataAnnotations; 命名控件转载于:https://www.cnblogs.com/since87/archive/2013/06/09/3129399.html

继承和多态 2.0 -- 继承的六个默认成员函数

本文重要介绍普通继承中如何写派生类的六个默认成员函数&#xff0c;主要是针对在派生类中&#xff0c;如何调用基类的六个默认成员函数 需要说明的一点就是&#xff0c;如果子类中没有调用父类的函数时&#xff0c;系统会自动生成一个。 构造函数 子类中有父类的成员&#…

js 让鼠标右下角有一排小字_js布局中一排大字下面接着一排小字怎么打出来?...

展开全部可以使用 TypewriterJS 实现效果是这样 ,百度图片少了一部分&#xff0c;可以通过链接32313133353236313431303231363533e78988e69d8331333433626438看效果链接: 网页链接示例在这里: 网页链接文档地址: 网页链接使用步骤引用 TypewriterJShtmlcss.article__title {fon…

Hudson神奇的环境变量

Hudson神奇的环境变量 http://blog.sina.com.cn/s/blog_798f21a00100z6zw.html转载于:https://blog.51cto.com/myloveworld/950156

英语影视台词---四、Sideways

英语影视台词---四、Sideways 一、总结 一句话总结&#xff1a;杯酒人生 Sideways&#xff0c;大致意思是“偏离、倾斜、转向…”。很明显中文译名与英文原名并没有什么关联&#xff0c;《杯酒人生》这个名字&#xff0c;其实也可以译为《并肩前行》&#xff0c;应该是从影片内…

继承和多态 3.0 -- 菱形继承

单继承和多继承 C的继承方式是支持单继承和多继承的&#xff0c;首先看一下代码&#xff0c;分清单继承和多继承 单继承 class A { public:int _a; };class B :public A { public:int _b; };class C : public A { public:int _c; }; 类似于上面的方式就是单继承&#xff0c;或…

C# split 几种使用方法

第一种方法&#xff1a; string s "abcdeabcdeabcde"; string[] sArray s.Split(c); foreach (string i in sArray) Console.WriteLine(i.ToString()); Console.ReadKey();输出下面的结果:abdeabdeabd…

模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

先从纯文本搜索讲起&#xff0c;这是最基本也是最重要的。从这篇开始&#xff0c;以及接下来连续几篇文章&#xff0c;都会介绍搜索的基础功能。注意&#xff0c;这几篇文章中谈论的都是基本的、正常的搜索功能&#xff0c;暂时不考虑Bug等因素。在很多软件&#xff08;例如wor…

EXT3与EXT4的主要区别

Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版&#xff0c;修改了 Ext3 中部分重要的数据结构&#xff0c;而不仅仅像 Ext3 对 Ext2 那样&#xff0c;只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性&#xff0c;还有更为丰富的…

Java IO 4 : RandomAccessFile

RandomAccessFile:   认识&#xff1a;java输入/输出流体系中功能最丰富的文件内容访问类 既可以读取文件内容&#xff0c;也可以向文件传输数据&#xff0c;并且支持“随机访问“的方式&#xff0c;程序可以跳转到任意地方来读写数据。 特点&#xff1a;与OutputStream/Writ…

二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解

树的结构主要是为了查找&#xff0c;这个主要是为了搜索&#xff0c;树的结构关注的不是增删查改 树 广义上面的树的结构我们不知道树的一个节点是有几个子节点的&#xff0c;所以这个时候我们需要定义的一种结构就是&#xff0c;一个节点的孩子是可以动态的增加的&#xff0…

impala 本年格式化时间_hive,hbase,impala之间的对比

hbase在三者中更注重的是存储&#xff0c;它实现了类似mysql的double write机制&#xff0c;但是它是一种NoSQL的数据库&#xff0c;并且是可以支持列式存储的&#xff0c;算是比较大的一个内存Hash表。hbase也采用了类似mysql中的mvcc的思想通过时间戳来做版本控制。hbase是在…

简单上手的游戏引擎

物理游戏引擎 GameSalad 转载于:https://www.cnblogs.com/sgdkg/archive/2013/06/14/3135882.html

Linux内核中关于定时器Timer的应用

2019独角兽企业重金招聘Python工程师标准>>> 在Touchscreen驱动中 1 声明 Ad7877.c (\linux-2.6.30.4\drivers\input\touchscreen): struct timer_list timer; /* P: lock */ 2 初始化 在函数 static int __devinit ad7877_probe(struct spi_device *spi) 中 执行 …

类加载过程中几个重点执行顺序整理

类的加载过程&#xff1a; 1、 JVM会先去方法区中找有没有相应类的.class存在。如果有&#xff0c;就直接使用&#xff1b;如果没有&#xff0c;则把相关类的.class加载到方法区 2、 在.class加载到方法区时&#xff0c;会分为两部分加载&#xff1a;先加载非静态内容&#xff…

二叉树 2.0 -- 非递归遍历

二叉树递归遍历存在的问题 如果我们的二叉树只有左子树&#xff0c;而且树的高度还很深的时候&#xff0c;这个时候递归调用遍历的时候&#xff0c;栈帧空间开辟的较大&#xff0c;很可能造成栈溢出。但是我们一个程序中&#xff0c;为堆分配的空间要比栈大的多&#xff0c;这…

田忌赛马贪心算法_田忌赛马 贪心算法

算法实验课回顾田忌赛马问题描述&#xff1a;你一定听说过田忌赛马的故事吧&#xff1f;如果3匹马变成n匹(n<100)&#xff0c;齐王仍然让他的马按照优到劣的顺序初赛&#xff0c;田忌可以按任意顺序选择他的赛马出赛。赢一局&#xff0c;田忌可以得到200两银子&#xff1b;输…

[转][小结][三种方法]实现WPF不规则窗体

实现WPF不规则窗体的三种常用的方法如下&#xff1a; 1.使用Blend等工具绘制一个不规则xaml&#xff0c;然后作为窗体的背景。这个可以参考xiaowei0705的这篇博文&#xff1a;WPF制作不规则的窗体 。 2.给window的Clip属性赋Path值。这个可以参考DebugLZQ前面的博文&#xff1a…