stack
- 头文件 #include <stack>
- 声明 stack<int> s;
void push( const T& value ); | 向栈顶插入一个元素 |
void pop(); | 移除栈顶元素 |
bool empty() const; | 检查栈是否为空 |
size_type size() const; | 返回栈中元素的数量 |
reference top(); const_reference top() const; | 更改栈顶元素 返回栈顶的元素 |
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
s.push(1); //将元素压入栈顶
s.push(2);
s.pop(); //弹出栈顶元素
cout << s.empty() << endl; //判断栈是否为空
cout << s.size() << endl; //返回栈内的元素个数
s.top() = 2; //更改栈顶元素
cout << s.top() << endl; //返回栈顶元素
return 0;
}
queue
- 头文件 #include <queue>
- 声明 queue<int> q;
void push( const T& value ); | 在队列尾插入一个元素 |
void pop(); | 删除队列首部的元素 |
bool empty() const; | 检查队列是否为空 |
size_type size() const; | 返回队列中元素的数量 |
reference front(); const_reference front() const; | 更改队列首部元素 返回队列首部元素 |
reference back(); const_reference back() const; | 更改队列尾部元素 返回队列尾部元素 |
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int> q;
q.push(1); //在队列尾插入一个元素
q.push(2);
q.pop(); //删除队列首部的元素
cout << q.empty() << endl; //检查队列是否为空
cout << q.size() << endl; //返回队列中元素的数量
q.front() = 10; //更改队列首部元素
cout << q.front() << endl; //返回队列首部元素
q.back() = 20; //更改队列尾部元素
cout << q.back() << endl; //返回队列尾部元素
return 0;
}
priority_queue
- 头文件 #include <queue>
- 声明 priority_queue<int> q;
void push( const T& value ); | 向优先队列中插入一个元素 |
void pop(); | 删除优先队列首部的元素 |
bool empty() const; | 检查优先队列是否为空 |
size_type size() const; | 返回优先队列中元素的数量 |
const_reference top() const; | 返回优先队列首部的元素 |
#include <iostream>
#include <queue>
using namespace std;
struct node{
int val;
bool operator<(const node & X) const {
return val > X.val; //此时,队列中的元素是按照从小到达排序
// return val < X.val; 这时候按照从大到小排序
}
node(int val) {this->val = val;};
};
struct cmp{
bool operator()(const node & a, const node & b) {
return a.val < b.val;
}
};
int main() {
priority_queue<node> q;
// priority_queue<node, vector<node>, cmp> q; 声明同上
for (int i = 1; i < 10; ++i)
q.push(node(i)); //向优先队列中插入一个元素
cout << q.size() << endl; //返回优先队列中元素的数量
while (!q.empty()) { //检查优先队列是否为空
cout << q.top().val << endl; //返回优先队列首部的元素
q.pop(); //删除优先队列首部的元素
}
return 0;
}
vector
- 头文件 #include <vector>
- 声明
- vector<int> v;
- vector<int> v(v1);
- vector<int> v(ary + 2, ary + 5);
- vector<int> v(10, 1);
vector<Elem> v; vector<Elem> v(v1); vector<Elem> v(begin, end); vector<Elem> v(n, elem); | 创建一个空的vector 复制一个v1的vector 创建一个[begin, end)区间的vector 创建一个含有n个elem的vector |
void assign(n, elem); void assign(begin, end); | 将n个elem的拷贝复制给v 将[begin, end)区间的值赋给v |
reference at(size_type pos); | 传回索引pos所指的数据 |
reference front(); const_reference front() const; | 传回第一个数据 |
reference back(); const_reference back() const; | 传回最后一个数据 |
iterator begin(); const_iterator begin() const; reverse_iterator rbegin(); const_reverse_iterator rbegin() const; | 返回指向第一个元素的地址 传回一个逆向队列的第一个数据的地址 |
iterator end(); const_iterator end() const; reverse_iterator rend(); const_reverse_iterator rend() const; | 指向迭代器中的最后一个数据的下一个位置的地址 传回一个逆向队列的最后一个数据的下一个位置的地址 |
v.insert(pos, elem); v.insert(pos, n, elem); v.insert(pos, begin, end); | 在pos位置插入一个elem拷贝 在pos位置插入n个elem拷贝 在pos位置插入[begin, end)的数据 |
v.erase(pos); v.erase(v.begin(), v.end()); | 删除pos位置的数据 删除[v.begin(), v.end())的数据 |
bool empty() const; | 判断容器是否为空 |
size_type size() const; | 返回容器中实际数据的个数 |
void push_back(const T& x); | 在容器尾部加入一个数据 |
void pop_back(); | 删除最后一个数据 |
void clear(); | 清空容器 |
v1.swap(v2); swap(v1, v2); | 将v1和v2互换 |
#include <iostream>
#include <vector>
using namespace std;
int main() {
int ary[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
vector<int> v; //声明一个空的vector
vector<int> v1(v); //复制一个v的vector
vector<int> v2(10, 1); //v2中有10个元素,每个元素的值为1
vector<int> v3(ary + 1, ary + 4); //v3中以区间[ary[1], ary[4])赋值
v.assign(ary, ary + 10); //v中以区间[ary[0], ary[10])赋值
v1.assign(10, 2); //v1中有10个元素,每个元素的值为2
cout << v.at(1) << endl; //输出v中在位置1中的元素
cout << v[1] << endl; //等同于上,不过他不会做位置越界的检查
cout << v.front() << endl; //输出v中第一个位置的元素
v.front() = 100; //为第一个位置的元素赋值
v.back() = 200; //为v中最后一个元素赋值
cout << v.back() << endl; //输出v中的最后一个位置的元素
v.insert(v.begin(), 10); //在开头插入元素10
v.insert(v.begin(), 5, 2); //在开头插入5个元素,每个元素为2
v.insert(v.begin()+2, ary+5, ary+6); //在v[2]的位置开始插入[ary[5], ary[6])的元素
v.erase(v.begin() + 2); //删除v[2]
v.erase(v.begin(), v.begin() + 5); //删除[v[0], v[5])元素
for (vector<int>::iterator itor = v.begin(); itor != v.end(); itor++)
cout << *itor << ' '; //正向遍历vector数组 v
cout << endl;
for (vector<int>::reverse_iterator ritor = v.rbegin(); ritor != v.rend(); ritor++)
cout << *ritor << ' '; //逆向遍历vector数组 v
cout << endl;
cout << v.size() << endl; //输出vector数组中元素的个数
while (!v.empty()) //判断v是否为空
v.pop_back(); //删除v中最后一个元素
v1.clear(); //清空vector数组v1
v.swap(v2); //交换v和v2
return 0;
}