您的位置:首页 > 编程语言 > C语言/C++

CppPrimer笔记 Chapter9 顺序容器

2017-03-14 23:11 218 查看

CppPrimer笔记 Chapter9 顺序容器

标签: Cpp

CppPrimer笔记 Chapter9 顺序容器
容器库概览92

顺序容器操作93

vector对象是如何增长的94

容器适配器96

容器库概览(9.2)

没有默认构造函数的类,定义容器时不能只传递一个元素数目参数.(我认为是 类中包含一个其他类类型的成员且这个成员的类型没有默认构造函数,则编译器无法初始化该成员.)

class X
{
public:
X(int a,int b) : x(a+b){}

int x;
};

int main()
{
vector<X> XX(10,{1,1});//ok 利用大括号调用X的初始化函数
vector<X> XX(10);//error 没有生成默认初始化函数


9.2.5

- 标准库
array
类 允许赋值,赋值号左右两边运算对象需具有相同类型

- 除
array
外,
swap
不对任何元素进行拷贝.

- 除了
string
外指向容器的迭代器,引用,指针在swap后都不会失效

- 对于
array
swap
后,指针,引用迭代器所绑定的元素保持不变,但值进行了交换.

- 9.2.7关系运算符(我认为理解成字符串,其实就是按字典排序)

1. 若两个容器具有相同大小且所有元素两两对应相等,则两容器相等

2. 若大小不等,但小容器每个元素的都等于大容器的对应元素,则小容器小于大容器

3. 若两个容器都不是另一个的前缀子序列,则比较结果取决于第一个不相等的元素

顺序容器操作(9.3)

insert
将元素插入到iter指向的元素之前的位置,并返回指向第一个新加元素的迭代器

erase(it1,it2)
删除
it1
一直到
it2
之前的那个元素.调用后
it1==it2


substr(be,en)
返回[be,en)的共en−be个元素的拷贝.若en越界,则仅返回到尾部.

关于
forward_list
的特殊

没有
insert
这样在iter前添加,删除元素的函数,而是
insert_after
在iter后添加,删除成员的元素.

没有
end()
而是
before_begin()
返回
const_iterator
首元素前不存在的元素的迭代器,无法接引用,用于在收不添加

向容器添加元素后,可能会使指向容器元素指针,引用或迭代器失效.

vector
string
,储存空间被重新分配,则均失效.未重新分配,则插入位置前的有效,之后的失效.

deque
,插入到首尾位置之外的任何位置都会导致迭代器,指针与引用失效. 在首尾插入,迭代器会失效,引用与指针不会.

list
forward_list`,均有效

向容器删除元素后,可能会使指向容器元素指针,引用或迭代器失效.

vector
string
,指向被删除元素之前元素的均有效.尾后迭代器必失效

deque
,在首尾外删除,则指向被删除元素外其他元素的均会失效.删除尾,则仅尾后迭代器失效,删除首,则尾后与其它均不失效(除了被删除的首部)

list
forward_list
,均有效.

vector对象是如何增长的(9.4)

预分配一段连续的内存,用完后得移动元素.

capacity 分配的全部的用于储存vecter的连续空间

size 实际使用的

reserve 人为调整capacity的函数,但不会使capacity小于size

容器适配器(9.6)

意义:一种机制,使某种事物的行为看起来像另一种事物一样. 如下,利用deque构造了stack,然后stk就是一个stack了

stack
,
queue
priority_queue
三种

deque<int> deq;
stack<int> stk(deq);//以拷贝方式构造
stack<string,vector<string>> str_stk;//在vector上实现空栈
cout << std.top() << endl;
std.push(5);
cout << std.size() << endl;
cout << deq.size() << endl;


优先队列使用在11.2.2节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CppPrimer