①stack栈
头文件:#include <stack>
定义:stack<data_type> stack_name;
如:stack <int> s
操作:
empty() – 返回bool型,表示栈内是否为空 (s.empty() )
size() – 返回栈内元素个数 (s.size() )
top() – 返回栈顶元素值 (s.top() )
pop() – 移除栈顶元素(s.pop(); )
push(data_type a) – 向栈压入一个元素 a(s.push(a); )
②队列
queue是一种先进先出(First In First Out, FIFO)的数据结构,从底端加入元素,从顶端取出元素。
头文件: #include <queue>
定义:queue <data_type> queue_name;
queue <int> q;
empty() – 返回bool型,表示queue是否为空 (q.empty() )
size() – 返回queue内元素个数 (q.size() )
front() – 返回queue内的下一个元素 (q.front() )
back() – 返回queue内的最后一个元素(q.back() )
pop() – 移除queue中的一个元素(q.pop(); )
push(data_type a) – 将一个元素a置入queue中(q.push(a); )
③Vector-动态数组。
头文件: #include <vector>
vector <data_type> vector_name;
vector <int> v;
empty() – 返回bool型,表示vector是否为空 (v.empty() )
size() – 返回vector内元素个数 (v.size() )
push_back(data_type a) 将元素a插入最尾端
pop_back() 将最尾端元素删除
v[i] 类似数组取第i个位置的元素(v[0] )
如果对v 内部进行排序
sort(v.begin(),v.end());
vector是动态空间,有其内部的空间分配机制来及时调整空间大小,
其实就是vector把申请空间,移动数据,释放原来的空间等操作封装在内部,
不需要用户去处理。
④优先队列(priority_queue)
头文件 #include <queue>
priority_queue <data_type> priority_queue_name;
如:priority_queue <int> q;//默认是大顶堆
q.push(elem) 将元素elem置入优先队列
q.top() 返回优先队列的下一个元素
q.pop() 移除一个元素
q.size() 返回队列中元素的个数
q.empty() 返回优先队列是否为空
priority_queue <data_type> priority_queue_name;
如:priority_queue q;//默认是大顶堆
上边这个是排的最大值
priority_queue<int, vector, greater > q;
这个才是最小值得在栈顶
注意 q.empty()如果队列为空 返回true 反之返回false
⑤
upper_bound(begin, end, value);
返回>value的元素的第一个位置。
lower_bound(begin, end, value);
返回>=value的元素的第一个位置。
这个可以用来给数组去重操作
vector<int>a;
int main()
{
int n; cin >> n;
for (int i = 0; i < n; i++)
{
int t; cin >> t;
a.push_back(t);
}
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
for (int i = 0; i < a.size()&&i<=500; i++)
{
cout << a[i] << " ";
}
}
⑥Map
提供了很好一对一的关系
头文件: #include <map>
map <data_type1, data_type2> map_name;
如:map <string, int> m;//默认按string由小到大排序
m.size() 返回容器大小
m.empty() 返回容器是否为空
m.count(key) 返回键值等于key的元素的个数
m.lower_bound(key) 返回键值等于key的元素的第一个可安插的位置
m.upper_bound(key) 返回键值等于key的元素的最后一个可安插的位置
m.begin() 返回一个双向迭代器,指向第一个元素。
m.end() 返回一个双向迭代器,指向最后一个元素的下一个 位置。
m.clear() 讲整个容器清空。
m.erase(elem) 移除键值为elem的所有元素,返回个数,对 于map来说非0即1。
m.erase(pos) 移除迭代器pos所指位置上的元素。
直接元素存取:
m[key] = value;
查找的时候如果没有键值为key的元素,则安插一个键值为key的新元素,实值为默认(一般0)。
⑦pair
1 pair<int, double> p1; //使用默认构造函数
2 pair<int, double> p2(1, 2.4); //用给定值初始化
3 pair<int, double> p3(p2); //拷贝构造函数
4.pair<int, double> p1; //使用默认构造函数
p1.first = 1;
p1.second = 2.5;
cout << p1.first << ' ' << p1.second << endl;
5.用sort 对pair 排序时 , 默认对 first 进行升序排列 ,
当first相同时, 对second 进行升序排列 ,
如有需求时 也可以自己写一个cmp 实现对其别的要求的排序 。