C++学习笔记汇总(四)
否则什么事情都不做
d) void shrink_to_fit();
//仅用于C++11,硬性将容器的capacity调整为size的大小
(3) 元素访问函数
a) reference operator[] (size_typen);
const_reference operator[] (size_type n) const;
//相当于数组下标
b) reference at (size_type n);
const_reference at (size_type n) const;
//作用和数组下标一样,但是超出容量时会抛出out_of_range异常
c) value_type* data() noexcept;
const value_type* data() const noexcept;
//仅用于C++11,返回容器第一个元素的指针,类似于数组的头指针,用法也和数组头指针一样
2.2.3 deque
(1) 使用比较
双端队列,也是在堆中保存内容的。它的保存形式如下: [堆1] [堆2] [堆3]…… 每个堆保存好几个元素,然后堆和堆之间有指针指向,看起来像是list和vector的结合品。deque可以让在前面或是在后面快速地添加删除元素,然后还可以有比较高的随机访问速度,但是随机访问速度比不上vector快,因为它要内部处理堆跳转。deque也有保留空间,由于deque不要求连续空间,所以可以保存的元素比vector更大,还有就是在前面和后面添加元素时都不需要移动其它块的元素,所以性能也很高。
增加任何元素都将使deque的迭代器失效。在deque的中间删除元素将使迭代器失效。在deque的头或尾删除元素时,只有指向该元素的迭代器失效。
(2) 功能函数
a) void resize (size_type n);
void resize (size_type n, value_type val);
//将容器的size变化成新的大小,如果n比当前size要小,则从容器后部开始删除元素;否则扩充size,可以指定填充的元素的初始值
b) void shrink_to_fit();
//仅用于C++11,deque的size一般来说可以比实际存放的元素数量要多,该方法强制调整内存使用量为已经存放元素的大小
(3) 元素访问函数
a) reference operator[] (size_typen);
const_reference operator[] (size_type n) const;
//相当于数组下标
b) reference at (size_type n);
const_reference at (size_type n) const;
//作用和数组下标一样,但是超出容量时会抛出out_of_range异常
(4) 容器操作函数
a) void push_front (constvalue_type& val);
void push_front (value_type&& val);
//插入元素到容器第一位
b) void pop_front();
//删除容器第一位的元素
2.2.4 list
(1) 使用比较
双向环状链表,元素也是在堆中存放,每个元素都是放在一块内存中,但list没有空间预留,所以每分配一个元素都会从内存中分配,每删除一个元素都会释放它占用的内存。由于数据结构是链表,所以不能随机访问一个元素,但是在开头、末尾和中间任何地方增加或删除元素所需时间都为常量。
增加任何元素都不会使迭代器失效。删除元素时,除了指向当前被删除元素的迭代器外,其它迭代器都不会失效。
(2) 容器操作函数
a) void push_front (constvalue_type& val);
void push_front (value_type&& val);
//插入元素到容器第一位
b) void pop_front();
//删除容器第一位的元素
c) void resize (size_type n);
void resize (size_type n, value_type val);
//将容器的size变化成新的大小,如果n比当前size要小,则从容器后部开始删除元素;否则扩充size,可以指定填充的元素的初始值
2.3 关联容器
2.3.1 所有关联容器共有函数
(1) 访问函数
a) const_iterator find (constvalue_type& val) const;
iterator find (const value_type& val);
//查找对应的值/key值,如果找到则返回其迭代器,如果找不到则返回end()
b) size_type count (constvalue_type& val) const;
//查找指定值/key值的数量,返回0或者1
c) iterator lower_bound (constvalue_type& val);
const_iterator lower_bound (const value_type& val) const;
或者
iterator lower_bound (const key_type& k);
const_iterator lower_bound (const key_type& k) const;
//返回容器中第一个值/key值大于或等于val的迭代器
d) iterator upper_bound (constvalue_type& val);
const_iterator upper_bound (const value_type& val) const;
或者
iterator upper_bound (const key_type& k);
const_iterator upper_bound (const key_type& k) const;
//返回容器