https://www.gravatar.com/avatar/932f1b40c8d0202ce03a0df412bfb0ff?s=240&d=mp

chaomai's Odyssey

C++关联容器

关联容器支持普通容器操作,不支持,

  • 顺序容器位置相关的操作,push_back等;
  • 构造函数或插入操作接受一个元素值和一个数量值得操作。

定义

定义一个map时必须指定关键字类型和值类型,set只需关键字类型

C++顺序容器

首先介绍顺序容器操作基本相同的部分,然后分别是每种容器要注意的地方。

定义和初始化

  • C c 默认构造函数
  • C c1(c2)C c1 = c2 c1初始化为c2的copy。c1和c2必须是相同的容器类型,且保存相同类型的元素。
  • C c{a, b, c, ...}C c = {a, b, c, ...} 列表初始化
  • C c(b, e)

除array外,还有以下两种,

C++泛型算法

泛型算法

  • 一般泛型算法不直接操作容器,而是运行于迭代器之上,由迭代器来进行操作;
  • 迭代器令算法不依赖于容器,但是某些算法使用的操作需要元素的类型;
  • 算法不会直接改变底层容器的大小;
  • 算法可能改变元素的值或移动元素,但不会直接添加或删除元素。

按使用元素的方式分类

只读算法

accumulate

accumulate的第三个参数类型决定了函数中使用那个加法运算符以及返回值的类型。

C++ 初始化

列表初始化(list initialization)

注:对于内置类型的变量,如果使用列表初始化且初始化存在丢失信息的风险,则编译器将报错。

1
2
double d = 3.14;
int i{d}; // 错误

默认初始化(default initialization)

如果定义变量时没有指定初值,则变量被默认初始化,具体值由变量类型决定。对象被默认初始化时自动执行默认构造函数。

C++IO库

iostream

条件状态

strm::iostate机器相关的位类型,用来标识流错误状态,有4个值,strm::badbitstrm::failbitstrm::eofbitstrm::goodbit。可用ios::bad()ios::fail()ios::eof()ios::good()来得知各个flag是否置位;用ios::rdstate()来获取流的当前状态。

C++Primer - 第1章 开始

缓冲区(bufer)

一个存储区域,用于保存数据。IO设施通常将输入(或输出)数据保存在一个缓冲区中,读写缓冲区的动作与程序中的动作是无关的。我们可以显式地刷新输出缓冲,以便强制将缓冲区中的数据写入输出设备。默认情况下,读cin会刷新cout;程序非正常终止时也会刷新cout。