1.string的构造函数
string(string&& str)
不保证将str视为const,这种构造函数被称为移动构造函数。
在有些情况下,编译器可能使用它而不是复制构造函数,以优化性能。
2.string的构造函数
string(initializer_list<char> il)
能够将列表初始化语法用于string类
string s = { 'a', 'b', 'c' };
大概这样写。
3.string最大的允许长度由常量string::npos指定。
通常是最大的unsigned int值
4.string的容量通常是16的倍数-1,例如调用reserve(50),48-1是放不下,只能要求64-1,的内存了,即63
5.string是基于模板类basic_string的一个具体化,basic_string有4个具体化。
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >
wstring;
typedef basic_string<char16_t, char_traits<char16_t>, allocator<char16_t> >
u16string;
typedef basic_string<char32_t, char_traits<char32_t>, allocator<char32_t> >
u32string;
u16string和u32string是C++11的
6.auto_ptr:C++98的版本,C++11已经摒弃了,提供了两个新的。指针赋值给别的指针之后,自身变为空了。
只能用于new的情况
7.unique_ptr:唯一指针,不能赋值给另外的指针了。赋值了的话,编译器会报错。如果源是临时右值,则不会报错。
可以使用move()函数来改变唯一指针的赋值
可以用于new和new[]
8.shared_ptr:计数指针,每一个指针指向对象都加1,指针过期就减1,最后一个指针过期的时候才delete。
只能用于new
9.还有一个weak_ptr:本书不讨论这个
10.模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。
STL定义了5中迭代器,并根据所需的迭代器类型对算法进行了描述。分别是输入迭代器,输出迭代器,正向迭代器,双向迭代器和随机访问迭代器。
输入迭代器使单向迭代器,可以递增,但不能倒退。
对于单通行、只读算法,可以使用输入迭代器;对于单通行、只写算法,则可以使用输出迭代器。
正向迭代器只使用++运算来遍历容器。
双向迭代器支持正向迭代器所有特性,同时支持--运算符。
随机访问迭代器具有双向地带去的所有特性,同时添加了支持随机访问的操作。
11.容器是一个概念,并没有一个确定的基类与之相对应。算是一种规范。
线性复杂度意味着时间与元素数目成正比。
12.vector类型是最简单的序列类型,除非其他类型有特殊有点能够更好满足程序需求,否则应默认使用这种类型。
13.deque双端队列(double end queue)类似于vector
从开始和结尾插入和删除数据,都是固定的时间,支持随机访问。
但是实现更加复杂,速度比vector慢
14.list 双向链表,
list在任何位置插入删除的时间都是固定的。
forward_list单向链表,每个节点都只链接到下一个节点。
15.queue队列,只能从队尾插入,队首弹出。
priority_queue,优先级队列,优先级最大的会被移到队首。
16.生成器(generator)是不用参数就可以调用的函数符。
一元函数(unary function)是用一个参数就可以调用的函数符
二元函数(binary function)是用两个参数可以调用的函数符。
返回bool值的一元函数是谓词(predicate)
返回bool值的二元函数是二元谓词(binary predicate)
17.STL将算法库分成4组:
非修改式序列操作
修改式序列操作
排序和相关操作
通用数字运算
前三组在头文件algorithm中,第四组是专用于数值数据的,在头文件numeric中。
总结,这章的东西看到一头雾水,除了几个常用的东西,其他的东西看得很艰难。
大多数内容都是在使用的时候边用边学的。
或者侧重于算法的功能才更加需要把。
总的来说就是数据结构与算法。迟点肯定要再重温这方面的内容的。或者到时再看回来,就不那么蛋疼了。