本文共 2964 字,大约阅读时间需要 9 分钟。
第一周学习STL
头文件:<string>
定义:string
访问:
s.size()-1
常用操作:
头文件:<stack>
定义:stack<data_type> stack_name;
操作:
s.empty()
:返回布尔类型,表示栈内是否为空s.size()
:返回栈元素个数s.top()
:返回栈顶元素s.pop()
:移除栈顶元素s.push(a)
:向栈内压入一个元素a先进后出
头文件:<queue>
定义:queue<data_type> queue_name;
操作:
q.empty()
:返回布尔类型,表示队列是否为空q.size()
:返回队列内元素个数q.front()
:返回队列内的下一个元素(第一个元素)q.back()
:返回队列内的最后一个元素q.pop()
:移除队列中的一个元素(只能在队首移除)q.push(a)
:将一个元素a置入队列中(只能在队尾加入)头文件:<vector>
定义:vector<data_type> vector_name;
常用操作:
v.empty()
:返回布尔类型,表示向量内是否为空v.size()
:返回向量内元素个数v.push_back(a)
:将元素a插入最尾端v.pop_back()
:将最尾端元素删除v.front()
:返回第一个位置v.back()
:返回最后一个位置v.clear()
:清空向量v.insert(pos)
:以指定位置插入新元素v.insert(use_global Increments)
:可以选择以当前位置插入或指定区间插入v[i]
优先队列按照元素权值自动排序,权值最高排在前面
头文件:<queue>
定义:priority_queue<data_type> priority_queue_name;
常用操作:
q.push(elem)
:将元素elem置入优先队列q.top()
:返回优先队列的下一个元素q.pop()
:移除一个元素q.size()
:返回优先队列中元素的个数q.empty()
:返回优先队列是否为空q.back()
:返回q的末尾元素less
和greater
优先队列,less
为大到小排序,greater
为小到大set
和multiset
根据特定排序准则自动排序,set
不允许重复元素,multiset
允许重复
头文件:<set>
定义:set<data_type> set_name;
常用操作:
s.insert(elem)
:插入一个元素elem副本,返回新元素的位置s.erase(elem)
:移除与elem元素相等的所有元素,返回被移除的元素个数s.erase(pos)
:移除迭代器pos指向的位置元素,无返回值s.clear()
:移除全部元素,清空容器s.size()
:返回集合大小s.empty()
:返回集合是否为空s.count(elem)
:统计元素值为elem的元素个数s.lower_bound(elem)
:返回第一个大于等于elem的元素位置s.upper_bound(elem)
:返回第一个大于elem的元素位置s.begin()
:返回双向迭代器,指向第一个元素s.end()
:返回双向迭代器,指向最后一个元素的下一个位置所有元素根据键值自动生成排序
不允许两个元素具有相同的键值
头文件:<map>
常用操作:
m.size()
:返回映射大小m.empty()
:返回映射是否为空m.count(value)
:统计实值等于value的元素个数m.find(value)
:返回键值为value元素的位置m.lower_bound(key)
:返回键值等于key的元素的第一个可插入位置m.upper_bound(key)
:返回键值等于key的元素的最后一个可插入位置m.begin()
:返回双向迭代器,指向第一个元素m.end()
:返回双向迭代器,指向最后一个元素的下一个位置m.clear()
:清空映射m.erase(elem)
:移除键值为elem的所有元素m.erase(pos)
:移除迭代器pos指向的位置元素m[key] = value
:查找键值为key时,若不存在则插入键值为key且实值为value的元素m.insert(e)
:插入一个元素ePair结构可以包含两个不同数据类型的元素
头文件:<utility>
定义:pair<data_type1, data_type2> pair_name;
常用操作:
pair(data_type1, data_type2)
:构造一个pair元素,分别取data_type1和data_type2pair(p)
:生成另一个同型pair的副本first
与second
公用函数访问各个元素,读写均支持返回值类型 operator 运算符(形参表){} 或者 返回值类型 operator 运算符(形参表){}
类Student中定义">"运算符:
bool operator>(const Student& p) { if(score > p.score) return true; else if(score == p.score && name < p.name) return true; else return false;}
以下代码片段可以替代常见的using namespace std;
:
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)#define rep(i, a, n) for(int i = a; i <= n; ++i)
常见的常见技巧:
sync_with_stdio(false);
和tie(0)
来提高输入输出速度std::sync_with_stdio(false);
禁用缓冲系统,采用std::ifstream
读取数据rep
循环结构代替传统的for
循环,适合大量数据处理const int INF = 0x3F3F3F3F; //无穷大typedef long long ll; //长整型
这篇文章主要总结了本周学习的STL相关内容,涵盖了一些常用容器的定义、操作及其使用方法。下周将继续深入学习,细化一些容器的使用技巧,并完善对算法思想的理解。希望通过不断的练习和学习,在比赛中锻炼自己的ARC能力,在团队中发挥重要作用。
转载地址:http://pugqz.baihongyu.com/