精华内容
下载资源
问答
  • C++标准库实现简介 C++标准库是一组C++模板类,提供了通用的编程数据结构和函数,如链表、堆、数组、算法、迭代器等C++组件。C ++标准库包含了C标准库,并在C++标准中进行了定义。 C++编译器开发厂商根据C++标准委员会...
  • C++ 标准库 第二版

    2018-07-27 18:09:55
    c++标准库第二版》概念清晰、实例详尽,是一本有关设计、实现和有效使用c 语言库函数,掌握创建可重用c 语言软件模块技术的参考指南.书中提供了大量实例,重在阐述如何用一种与语言无关的方法将接口设计实现独立出来,...
  • 详细书签,文字可选取可搜索。。 文字可选取,可搜索 c++标准库第2版的中文版,包含目录,方便使用。c++标准库对学习c++还是有很大作用的,对c++的编程思想更加深入了解,也是一个很好的工具书。
  • C++标准库介绍

    2017-08-29 21:25:17
    C++标准库
  • c++标准库第二版高清影印版pdf,侯捷译,230M,c++程序员必看
  • STL(Standard Template Library,标准模板)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经...在C++标准中,STL被组织为下面的13个头文件:、、、、、、、、、、、和。
  • C++ 标准库

    2012-11-30 14:52:41
    C++ 标准库 容器总结 里边是把c++中主要的东西提出来的。可以看下
  • txt文件里包含百度网盘以及提取码,如果失效可以联系我,txt里有我的联系方式,我可以发到你的邮箱。
  • C/C++标准库源代码

    千次下载 热门讨论 2015-08-16 10:10:31
    C/C++标准库源代码,从Microsoft Visual Studio 10.0即Visual Studio 2010中提取出来的,希望对大家的学习和工作有所帮助。
  • c++标准库参考.pdf

    2020-06-15 16:08:38
    c++标准库参考 微软 c++ 文档 离线pdf文档 c++标准库参考 微软 c++ 文档 离线pdf文档
  • C++标准库

    万次阅读 多人点赞 2019-06-14 16:20:23
    1.C++标准定义了庞大且功能丰富的标准库,其内容分为10类,包括: C1语言支持 C2输入/输出 C3诊断功能 C4通用工具 C5字符串 C6容器 C7迭代器 C8算法 ...

    1.C++标准定义了庞大且功能丰富的标准库,其内容分为10类,包括:

    C1语言支持                   C2输入/输出                 C3诊断功能

    C4通用工具                   C5字符串                       C6容器

    C7迭代器                      C8算法                           C9数值操作

    C10本地化

     2.C++标准库所有的头文件都没有扩展名(.h),内容总共在51个标准头文件中定义。其中18个<cname> 形式的头文件(<complex>除外)内容与标准C语言的name.h头文件相同,但包含了C++扩展的功能。

    在<cname>形式的头文件中,与宏定义相关的名称在全局作用域中定义,其他名称在std命名空间中声明。

    另外,在C++中还可以使用name.h形式的C语言头文件,但不建议这样用。

    表1 C++标准库索引

    C++标准库由三组库构成:

    (1)C库:由C标准库扩展而来,强调结构、函数和过程,不支持面向对象技术。

    (2)C++库:增加了面向对象的库,包含了既有关键功能的类

    (3)标准模板库(STL):高效的C++程序库。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。

    以上库文件都被定义在namespace std 中。

    C++库可以不规定头文件的扩展名。

    C标准库

    1)<Cmath>:提供给了22个不同的数学函数,如abs()、sqrt()、exp()等。

    2)<cstdlib>:提供了常用的数学函数,3个特殊函数和2个常量。

    exit():退出程序,清除静态对象

    abort():强制退出程序

    atexit():将一个函数作为参数并在程序退出时调用

    EXIT_SUCCESS:程序已经正常完成

    EXIT_FAULURE:程序正常结束

    3)<cassert>:定义了一个函数assert,用来测试一个条件,并在条件为假时强制程序退出。通常用来判断内存分配是否成功。

    4)<cctype>:提供了确定字符类型的功能。可以判断一个字符是否为数字字符、图形字符、小写、大写或空格并可以将字符进行大小写转换。

    5)<cerrno>:定义了一个变量,用它可以确定程序中发生的错误的类型。

    C++类库

    1)<string>:支持字符串处理的类库

    2)<complex>:提供了复数的表示和算法

    float_complex类

    double_complex类

    long_double_complex类

    3)<ios>定义了I/O流类的虚基类ios,通常不直接用它。

    4)<iostream>:标准I/O流类库,提供了cin、cout等全局对象类来支持输入输出功能

    5)<istream>:输入流类库

    6)<ostream>:输出流类库

    7)<fstream>:读写文件的类

    标准模板库STL

    在标准库中,容器、迭代器、算法和数值操作合称为标准模板库。

    STL被组织为以下13个头文件:<algorithm>,<deque>,<functional>,<iterator>,<vector>,<list>,<map>,<memory>,<numeric>,<queue>,<set>,<stack>,和<utility>。

    几乎所有的标准模板代码采用了类模板和函数模板的形式,因此相比于传统的由函数和类组成的库来说STL提供了更好的代码重用。

    <algothrithm>:提供了通用的算数算法和STL的一般算法。

    sort:以升序重新排列范围内的元素

    swap:交换存储在两个对象中的值

    max_element:指出序列中最大的元素

    find:对范围内的元素进行查找

    copy:复制序列

    replace:将范围内的所有等于old_value的元素都用new_value替代。

    <numerialc>:提供了4类对序列进行数字处理的算法

    accumulate:累加

    product:内乘

    partial_sum:部分和

    adjacent_difference():邻接差值

    展开全文
  • C++标准库,C++ Standard Library,是类库和函数的集合,其使用核心语言写成,由c++标准委员会制定,并不断维护更新。C++强大的功能来源于其丰富的类库及库函数资源。[1]C++标准库(C++ Standard Library, 亦可称作...
  • C++标准库和参考手册(中文版)
  • c++标准库电子书

    2017-08-15 17:20:29
    c++标准库电子书
  • 讲述了c++标准库,很全面,浅显易懂,含c++11新特性
  • 难得微软能主动发布跨平台的C++标准库PDF文档,带详尽示例,且支持最新的Visual Studio 2017。拿来作为工具书收藏也是不错的。
  • 书出版时间 2015年6月 侯捷 译,带书签,扫描版 pdf,非常值得推荐。学习c++11的好书。
  • c++标准库手册-经典版

    2014-03-26 11:57:23
    c++标准库手册-经典版
  • C++标准库——自学教程与参考手册(第2版)英文版.pdf
  • C++标准库代码

    2018-11-22 16:52:12
    C++标准库代码,都是分开的程序文件,可供学习参考,很完整,对深入学习C++很有帮助!
  • C++标准库(第2版)》是全球C++经典权威参考书籍时隔12年,基于C++11标准的全新重大升级。标准库提供了一组公共类和接口,极大地拓展了C++语言核心功能。《C++标准库(第2版)》详细讲解了每一标准库组件,包括其...
  • C++标准库源代码

    热门讨论 2010-10-08 00:55:52
    C++标准库源代码
  • Linux下的C++标准库

    2013-06-04 17:10:15
    Linux下的std C++ 标准库 下载后,解压,将文件拷贝到/lib或者/usr/lib目录下,可以解决提示libstdc++。so找不到的问题
  • c++标准库stl帮助文档

    2012-11-05 15:32:08
    c++标准库stl帮助文档,对初学stl十分有用
  • C++标准库,中文版

    2012-02-01 00:58:13
    大名鼎鼎的Nicolai M. Josuttis著,侯捷/孟岩翻译,初高级C++程序员的必备参考书
  • C和C++标准库源代码

    2010-07-05 10:03:04
    C和C++标准库源代码,多阅读一下久经考验的 标准库源码,绝对是调高编程技能的一个不错选择
  • C++标准模板(STL),适合想要深入学习C++编程的小伙伴。
  • C/C++标准库到底是什么?

    千次阅读 2020-03-01 01:14:58
    C/C++ 标准库 在学习 C/C++ 的日子里,我们经常会有一个困惑:我们在代码里使用的标准库函数和类都是哪里来的?谁实现了它们?它们是打包好在操作系统里了吗?有没有官方的 C/C++ 手册呢? 在这篇文章里,我会通过...

    C/C++ 标准库

    在学习 C/C++ 的日子里,我们经常会有一个困惑:我们在代码里使用的标准库函数和类都是哪里来的?谁实现了它们?它们是打包好在操作系统里了吗?有没有官方的 C/C++ 手册呢?

    在这篇文章里,我会通过讲述C和C++的一些核心概念以及库函数实现等,尽力去回答这些问题。

    C和C++是如何被创造出来的

    当我们在谈论C和C++时,我们实际上是在谈论一系列的规则,这些规则定义了这个语言应该做什么,怎么做,以及需要提供什么样的功能。C/C++编译器必须遵循这些规则,从而处理C/C++源代码以生成可执行程序。这听起来与HTML很相似:HTML是浏览应该遵循的一系列指令从而使其能够以一种确定的方式渲染出网页。

    与HTML类似,C/C++语言中的规则也是理论性的。国际标准化组织(ISO)的一大群人每年聚会几次,讨论并在纸上定义语言规则。是的,C/C++是标准化的产物。他们最后会产出一本叫做 「标准」(Standard)的白皮书,并且你可以从他们的网站上买到。随着语言的不断发展,每次发布一版白皮书,都会定义一个新标准,这也是为什么我们有不同的C和C++版本:C99,C11,C++03,C++11,C++14等等,这里的数字代表的是发布年份。

    这些「标准」是非常细节化的技术文档:所以我们一般不会把它当作书籍去阅读。它通常被分为两部分:

    1. C/C++特性和功能。
    2. C/C++ API —— 一开发人员在其 C/C++ 程序中使用的一系列类,函数和宏的集合。

    例如,下面是从C标准中第一部分中节选的一部分,这里定义了main函数的结构。
    在这里插入图片描述

    下面则是从同一份标准中节选的对一个 C API - fmin函数的描述。
    在这里插入图片描述

    正如我们所看到的,在这份标准里是几乎没有代码的。所以必须有人阅读这份标准,然后将其实现成计算机能够使用的形式。这也就是致力于「编译器」和「标准库实现」的人们所做的事情:前者制作一个可以读取和处理C和C++源文件的工具,后者则将标准库转换为代码。下面让我们深入看一看。

    C 标准库

    C标准库(C Standard Library / ISO C Library),是用于诸如输入/输出处理,字符串处理,内存管理,数学计算和许多其他操作系统服务之类任务的宏,类型和函数的集合。它是在C标准中(例如C11标准)中被指定的。它的内容分布在不同的头文件中,例如上文提到过的math.h

    C++ 标准库

    与 C标准库 的概念相似,只不过是针对C++的。C++标准库是一系列的C++模板,其中提供了一些常用的数据结构和函数,例如列表,栈,数组,常用算法,迭代器,以及其他你能想到的C++组件。同时,C++标准库还包含了C标准库,并且C++标准中也指定了C标准。

    C/C++ 标准库的实现

    现在我们来讨论真正的代码。致力于标准库实现的程序员们在阅读官方C/C++标准后,用代码将它们实现出来。它们必须依赖操作系统所提供的函数(读写文件,内存分配,线程创建等系统调用)来实现标准库,因此每一个操作系统都有自己的标准库实现,有时它是系统的一个核心部分,有时它作为附加部分——编译器,必须单独下载安装。

    GNU/Linux 实现

    GNU C Library,也被称作glibc,是GNU工程对C标准库的实现。并且,不是所有的标准C函数都能在glibc中找到:大部分数学函数都在另一个叫做libm的库中实现。

    虽然在今天,glibc是Linux中使用最为广泛的C标准库,然后,在90年代有一段时间,它有一个叫做Linux libc(or just libc)的竞争对手,这个对手是从glibc 1.x版本中fork出来的。在那段时间里,libc是许多Linux发行版中的C标准库实现。

    在多年的发展后,glibc开始比Linux libc要优秀的多,因此所有的Linux发行版都用回了glibc。因此如果你现在在你的Linux系统中发现了名叫libc.so.6的文件,不要担心,它并不是Linux libc,而是现代的glibc,之所以将版本号加到6,就是因为要与之前的Linux libc进行区分。而之所以不叫glibc.so.6的原因则是所有的Linux库都必须以lib开头。

    另一方面,C++标准库实现则是在libstdc++中,也叫The GNU Standard C++ Library,这是一个在 GNU/Linux 上实现标准C++库的正在进行的项目。通常,默认情况下,所有常用的Linux发行版都将使用libstdc++

    Mac和iOS中的实现

    在Mac和iOS中,C标准库的实现在libSystem中,这是一个位于/usr/lib/libSystem.dylib文件中的核心库。libSystem中还有一些其他的部分,例如math库,thread库以及其他底层函数。

    而对于C++标准库而言,在 OS X Mavericks(version 10.9)之前,默认使用libstdc++. 这与现代Linux系统中的实现是相同的。而从 OS X Mavericks开始,苹果转向了libc++,一个LLVM工程中用来代替GNU libstdc++的C++标准库实现。

    ios开发者可以使用 iOS SDK( Software Development Kit)来调用标准库(iOS SDK 是用来开发iOS应用的一套工具)。

    Windows中的实现

    在Windows中,标准库的实现一直严格绑定到Visual Studio中。他们称其为 C/C++ Run-time Library(CRT),其中同时实现了C和C++标准库。

    在很早的时候,CRT的实现在名为CRTDLL.DLL文件中(当时应该没有C++标准库)。从Windows95开始,微软开始把它封装为MSVCRT[version-number].DLL(例如 MSVCRT20.DLL, MSVCRT70.DLL 等等),这时大概包含了C++标准库。大约在1997年,他们决定将名称简化为MSVCRT.DLL,不幸的是,这导致了令人讨厌的DLL混乱。因此,从 Visual Studio version 7.0 开始,他们又换回了带上版本号的表示方式。

    Visual Studio 2015 带来了一次深度的CRT重构。C/C++标准库实现移动到了一个新的库中,the Universal C Runtime Library(Universal CRT or UCRT). UCRT现在是Windows的组件,从Windows10开始作为操作系统的一部分提供。

    Android中的实现

    Bionic是Google为其安卓操作系统编写的C标准库实现。第三方开发者能够通过Android Native Development Kit(NDK)来访问Bionic(NDK是能够让你使用C/C++来编写安卓应用的一套工具)。

    而对于C++而言,NDK 则提供了几种实现:

    1. libc++,安卓现在所使用的官方C++标准库。从 NDK Release 17 开始,它将成为NDK中唯一支持的C++标准库。
    2. gnustl,这是libstdc++的别名,也就是 GNU/Linux 中使用的C++标准库。在安卓中这个库的使用已经不建议了,并且它将从NDK Release 18 开始被移除。
    3. STLPort,这是一个由 STLport 项目 实现的C++标准库,从2008年开始就不活跃了。与gnustl类似,这个库也会在 NDK Release 18 中被移除。

    我可以替换默认的标准库实现吗?

    通常来说,如果我们在资源极其有限的系统上工作,那么可能会需要一个不同的C标准库实现。仅举几例,包括uClibc-ngmusl libcDiet libc,它们都致力于在嵌入式Linux系统中进行开发,以提供较小的二进制文件和较小的内存使用。

    C++标准库也有不同的实现方式:例如 Apache C++标准库,uSTL 或 EASTL 等。因为考虑到开发速度,最后两个实际上只实现了模板部分,而没有实现整个库。而Apache版本则侧重于可移植性。

    如果我不使用标准库呢?

    不使用标准库十分简单:只要不引入任何它的头文件即可。然而,为了让你的程序能够做到某些功能,你需要通过系统调用直接与操作系统打交道。正如我之前所说的,这本来是标准库中用于实现这些功能的方法。并且很有可能你还需要使用汇编语言来与硬件借口打交道。

    如果这听起来让你感到兴奋,那么我可以告诉你,Internet 上的某些人正在尝试编写不使用标准库的工作程序。用这种方式写程序,你会失去可移植性,因为你使用了操作系统本身提供的系统调用函数。然而使用这种方式编程可能会使你学到很多知识,并且让你在使用抽象库的时候真正知道自己在干什么。

    除了学习之外,你在为嵌入式系统编程的时候也不会想包含标准库:在有限的内存下,每一个字节都很重要,因此你更倾向于编写更多的汇编代码,因为这时的代码不需要可移植性。The demoscene是一个项目,在其中人们努力将精美的视听演示内容放入有限大小的程序二进制文件中 —— 4K仍然不是最低限度:一些演示机构组织1K,256字节,64字节甚至32字节的比赛,其中是不许使用标准库的。

    参考资料

    What are the C and C++ Standard Libraries?

    展开全文
  • C++标准库简介

    2020-10-14 22:06:01
    一、C++标准库简介 1、C++标准库简介 C++标准库(C++ Standard Library),是类库和函数的集合。 C++编译器厂商根据C++标准委员会官方的ISO规范并将其转化为代码。C++编译器厂商在实现C++标准库过程中必须依赖其...

    一、C++标准库简介

    1、C++标准库简介

    C++标准库(C++ Standard Library),是类库和函数的集合。 
    C++编译器厂商根据C++标准委员会官方的ISO规范并将其转化为代码。C++编译器厂商在实现C++标准库过程中必须依赖其不同操作系统所提供的系统调用接口,因此每个平台都有其自己的C++标准库实现
    C++标准库的特点如下:
    A、C++标准库不是C++语言标准的一部分,由类库和函数库组成。
    B、C++标准库中定义的类和对象都位于std命名空间中。
    C、C++标准库的头文件都不带.h后缀
    D、C++标准库涵盖了C库的功能

    2、C++编译环境

    C++编译环境组成如下:
    C++语言学习(九)——C++标准库简介
    C++编译环境的组成如下:
    A、不同的C++编译器有自己不同的C++扩展语法模块
    B、不同的C++编译器有相同的C++标准语法模块
    C、不同的C++编译器有自己的编译器扩展库
    D、为了便于软件开发,不同的C++编译器附带提供C语言兼容库,C语言兼容库头文件带.h后缀,如#include <stdio.h>,#include <math.h>等
    E、C++标准库中包含一个涵盖C库功能的子库,通常头文件以c开头,如#include <cmath>,#include <cstring>等。
    F、不同的C++编译器都有C++编译器厂商实现的遵循C++标准的C++标准库,C++标准库有相同的功能接口,但内部实现不同。

    二、C++标准库实现

    1、C++标准库实现简介

    C++标准库是一组C++模板类,提供了通用的编程数据结构和函数,如链表、堆、数组、算法、迭代器等C++组件。C ++标准库包含了C标准库,并在C++标准中进行了定义。
    C++编译器开发厂商根据C++标准委员会官方发布的C++ ISO规范并将其转化为代码。C++编译器厂商在编译器实现过程中必须依赖其操作系统所提供的功能(读/写文件,分配内存,创建线程等系统调用),因此每个平台都有其自己的标准库实现。

    2、GNU/Linux版实现

    在GNU/Linux上,C++标准库通常由libstdc++或GNU标准C++库项目实现。通常,所有常规的Linux发行版都默认使用libstdc++

    3、Mac和iOS版实现

    在OS X Mavericks(V10.9)前的Mac OS上,libstdc++是默认C++标准库实现。自OS X Mavericks开始,Apple切换到使用libc++作为C++标准库实现。

    4、Windows版实现

    在Windows上,C++标准库的实现一直严格限定在微软官方的编译器Visual Studio中。Windows上的C++标准库通常称为C/C++运行时库(CRT),涵盖了C/C++二者的实现。
    Windows最开始的C++标准库实现为CRTDLL.DLL库。Windows 95开始,Microsoft开始将其迁移到MSVCRT [版本号] .DLL(MSVCR20.DLL,MSVCR70.DLL等)上。 
    Visual Studio 2015引入了深度的CRT重构。C/C ++标准库的实现迁移到一个新库,Universal C运行时库 (Universal CRT或UCRT),编译为UCRTBASE.DLL。 UCRT从Windows 10开始作为操作系统的一部分提供。

    5、Android版实现

    Bionic是Google为其Android操作系统所编写的C标准库实现,直接在底层使用。第三方开发者可以通过Android原生开发工具包(NDK)访问Bionic,NDK可以使用C和C++代码编写Android应用程序。
    NDK提供了很多C++标准库版本的实现:
    A、libc++,从Lollipop开始的官方安卓系统和现代Mac操作系统都将其作为C++标准库使用。从NDK发布17版本开始,成为NDK中唯一可用的C++标准库实现。
    B、gnustl,libstdc++的别名,在NDK发布18中删除。
    C、STLport,由STLport项目编写的C++标准库的第三方实现,自2008年以来一直处于不活跃状态。STLport在NDK发布18中移除。

    6、其它实现版本

    C++标准库也有不同的实现版本:Apache版C++标准库,uSTL以及EASTL等等。Apache版本C++标准库注重可移植性。

    三、C++标准库组成

    1、 语言支持功能

    <cstddef>:定义宏NULL和offsetof以及其它标准类型size_t和ptrdiff_t。与对应的标准C头文件的区别是,NULL是C++空指针常量的补充定义(C++11中已有关键字nullptr),宏offsetof接受结构或者联合类型参数,只要没有成员指针类型的非静态成员即可。
    <limits>:提供与基本数据类型相关的定义。例如,对于每个数值数据类型,它定义了可以表示出来的最大值和最小值以及二进制数字的位数。
    <climits>:提供与基本整数数据类型相关的C样式定义,C++样式定义在<limits>中。
    <cfloat>:提供与基本浮点型数据类型相关的C样式定义,C++样式定义在<limits>中。
    <cstdlib>:提供支持程序启动和终止的宏和函数,还声明了许多其他杂项函数,例如搜索和排序函数,从字符串转换为数值等函数。<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样式支持。

    2、流输入/输出

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

    3、 诊断功能

    <stdexcept>:定义标准异常。
    <cassert>:定义断言宏,用于运行时检查。
    <cerrno>:支持C样式的错误信息。

    4、工具函数

    <utility>:定义重载的关系运算符,简化关系运算符的写入,还定义了pair类型,pair类型是一种模板类型,可以存储一对值。
    <functional>:定义了许多函数对象类型和支持函数对象的功能,函数对象是支持operator()()函数调用运算符的任意对象。
    <memory>:给容器、管理内存的函数和auto_ptr模板类定义标准内存分配器。
    <ctime>:支持系统时钟函数。

    5、字符串处理

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

    6、容器类模板

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

    7、迭代器

    <iterator>:给迭代器提供定义和支持。

    8、算法

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

    9、数值操作

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

    10、本地化

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

    四、C++标准库使用示例

    1、C++标准库使用示例

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        string s = "Hello, C++ Library.";
        cout << s <<endl;
        return 0;
    }

    上述代码中,使用了C++标准库中的string类和iostream流类。

    2、C++标准库的C库子模块使用示例

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        string s = "Hello, C module of C++ Library.";
        cout << s <<endl;
        double d = sqrt(4.0);
        cout << d << endl;
        return 0;
    }

    上述代码中,使用了C++标准库中的string类、iostream流类,以及C++标准库中C库的cmath库。

    3、C语言兼容库使用示例

    #include <stdio.h>
    #include <math.h>
    
    int main(int argc, char *argv[])
    {
        const char* s = "Hello, C Compatible Library.";
        printf("%s\n", s);
    
        double d = sqrt(4);
        printf("%lf\n", d);
        return 0;
    }

    上述代码中,使用了C兼容库的stdio库和math库。

    五、C++字符串类

    1、C语言的字符串

    C语言不支持真正意义上的字符串,但可以使用字符数组和一组函数实现字符串操作。C语言不支持自定义类型,因此也不能定义字符串类型。

    2、C++语言的字符串

    C++语言可以自定义类型,可以通过类完成字符串类型的定义,但C++语言也没有原生的字符串类型。
    C++语言通过C++标准库提供的string类型实现对字符串类型的支持。
    string类的特性如下:
    A、string直接支持字符串连接
    B、string直接支持字符串的大小比较
    C、string直接支持子串查找和提取
    D、string直接支持字符串的插入和替换

    3、C++字符串与数字的转换

    C++标准库提供了相关类对字符串和数字进行转换。
    字符串流类sstream用于string的转换。
    使用字符串流类需要包含#include <sstream>头文件。
    istringstream表示字符串输入流,ostringstream表示字符串输出流。

    #include <iostream>
    #include <sstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        //字符串转换为数字
        istringstream iss("3.14");
        double pi;
        if(iss >> pi)
        {
            cout << "PI = " << pi<< endl;
        }
        //数字转换为字符串
        ostringstream oss;
        if(oss << pi)
        {
            string PI = oss.str();
            cout << "PI = " << PI << endl;
        }
    
        return 0;
    }

    4、字符串循环右移示例

    #include <iostream>
    #include <sstream>
    #include <string>
    
    using namespace std;
    
    string operator >> (const string& s, int n)
    {
        string ret;
        unsigned int pos = 0;
        //右移位数计算
        n = n % s.length();
        //右移的开始位置
        pos = s.length() - n;
        //右移部分的子串作为起始
        ret = s.substr(pos);
        //连接未移动子串
        ret += s.substr(0,pos);
        return ret;
    }
    
    int main(int argc, char *argv[])
    {
        string s = "abcdef";
        cout << (s >> 3) << endl;//"defabc"
        return 0;
    }

    5、string类操作注意事项

    string类内部通过一个数据空间保存字符数据,通过一个成员变量保存当前字符串的长度。因此,C++开发中不能使用C语言的方式对string的存储空间进行直接操作,而应该使用string提供的接口函数进行字符串操作。

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        string s = "12345";
        s.reserve(20);
        //直接对string对象的存储空间进行操作
        for(int i = 0; i < 5; i++)
        {
            s[5+i] = 'a'+i;
        }
        cout << s << endl;//12345
        //string对象的存储空间修改结果如下:
        for(int i = 0; i < 5; i++)
        {
            cout << s[5+i] << endl;
        }
        //通过string类接口进行字符串操作
        s.append("ABCD");
        cout << s <<endl;//12345ABCD
        return 0;
    }

    上述代码中,直接对string对象的底层数据进行字符串操作后,使用string类的接口可能不能访问到对string对象底层数据的修改。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 305,752
精华内容 122,300
关键字:

c++标准库

c++ 订阅