C++面向对象程序设计学习笔记(10)
vector list queue stack deque priority_queue
vector
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
定义一般形式
vector<数据类型>定义名字
头文件 #include <vector>
操作
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
list
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.
定义一般形式
list<数据类型>定义名字
头文件 #include <list>
操作
assign() 给list赋值
back() 返回最后一个元素
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 如果list是空的则返回true
end() 返回末尾的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回list的配置器
insert() 插入一个元素到list中
max_size() 返回list能容纳的最大元素数量
merge() 合并两个list
pop_back() 删除最后一个元素
pop_front() 删除第一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin() 返回指向第一个元素的逆向迭代器
remove() 从list删除元素
remove_if() 按指定条件删除元素
rend() 指向list末尾的逆向迭代器
resize() 改变list的大小
reverse() 把list的元素倒转
size() 返回list中的元素个数
sort() 给list排序
splice() 合并两个list
swap() 交换两个list
unique() 删除list中重复的元素
queue
即队列,只能从队尾插入元素,从队首删除元素
定义一般形式
queue<数据类型>定义名字
头文件 #include <queue>
操作
push(x) 将x压入队列的末端
pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
front() 返回第一个元素(队顶元素)
back() 返回最后被压入的元素(队尾元素)
empty() 当队列为空时,返回true
size() 返回队列的长度
stack
即栈,只能从队尾插入元素,从队尾删除元素
定义一般形式
stack<数据类型>定义名字
头文件 #include <stack>
操作
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
deque
deque(双端队列)是由一段一段的定量连续空间构成,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速。 在中间部分安插元素则比较费时,因为必须移动其它元素。
定义一般形式
deque<数据类型>定义名字
头文件 #include <deque>
操作
size(); 容器大小
max_size(); 容器最大容量
resize(); 更改容器大小
empty(); 容器判空
shrink_to_fit(); 减少容器大小到满足元素所占存储空间的大小
push_front(const T& x); 头部添加元素
push_back(const T& x); 末尾添加元素
insert(iterator it, const T& x); 任意位置插入一个元素
insert(iterator it, int n, const T& x); 任意位置插入 n 个相同元素
insert(iterator it, iterator first, iterator last); 插入另一个向量的 [forst,last] 间的数据
pop_front(); 头部删除元素
pop_back(); 末尾删除元素
erase(iterator it); 任意位置删除一个元素
erase(iterator first, iterator last); 删除 [first,last] 之间的元素
clear(); 清空所有元素
deq[1]; 下标访问,并不会检查是否越界
at(1); at 方法访问以上两者的区别就是 at 会检查是否越界,是则抛出 out of range 异常
front(); 访问第一个元素
back(); 访问最后一个元素
assign(int nSize, const T& x); 多个元素赋值,类似于初始化时用数组进行赋值
swap(deque&); 交换两个同类型容器的元素
begin(); 开始迭代器指针
end(); 末尾迭代器指针,指向最后一个元素的下一个位置
cbegin(); 指向常量的开始迭代器指针,意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。
deq.cend(); 指向常量的末尾迭代器指针
rbegin(); 反向迭代器指针,指向最后一个元素
rend(); 反向迭代器指针,指向第一个元素的前一个元素
priority_queue
优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则。
定义一般形式
priority_queue<数据类型>定义名字
头文件 #include <queue>
操作
empty() 如果队列为空返回真
pop() 删除队顶元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列队顶元素(队列中的front()变成了top())
在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。