c++STL学习总结
ACM程序设计基础课第一阶段
##类与成员函数
- string类
名称:字符序列
特点:长度无限
常用成员函数:size();empty();push_back();insert(地址, 字符); append();erase()
常见操作:赋值、连接、整体输出、单项输出、比较(字典序) - 堆栈stack<>
名称:堆栈
特点:后进先出
常用成员函数:top();pop();push();empty();size()
基础用法:数据类型转换(除基取余)
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int a;
stack<int> s;
cin>>a;
while(a)
{
s.push(a%2);
a=a/2;
}
while(!s.empty())
{
cout<<s.top();
s.pop();
}
return 0;
}
- 队列queue<>
名称:队列
特点:先进先出
常用成员函数:empty();size();front();back();pop();push()
迭代器函数:begin();end()
实现方式:queue a; - 优先队列priporitor_queue<>
名称:优先队列
特点:数值最大者自动放在第一个位置 (字典序)
常用成员函数:empty();size();top();push();pop()
迭代器函数:begin();end()
应该注意:优先队列没有front();back() - 向量vector<>
名称:向量、模拟数组、动态数组
特点:永不越界
常用成员函数:empty();size();push_back();pop_back();clear();
front();back()
迭代器函数:begin();end()
应该注意:模拟数组没有pop_front();push_front() - 集合set<>
名称:集合
特点:自动按元素的数值大小做升序排序;不允许元素相同
常用成员函数:insert();erase(地址);erase(数值);clear()
迭代器函数:begin();end() - 多重集合multiset<>
名称:多重集合
特点:自动按元素的数值大小做升序排序;允许元素相同
常用成员函数:insert();erase(地址);erase(数值);clear()
迭代器函数:begin();end() - 映射map<,>
名称:映射
特点:自动按元素下标的字典序升序排序;不允许元素下标相同
常用成员函数:size();empty();insert();count();lower_bound();upper_bound();clear()
迭代器函数:begin();end() - 多重映射multiset<>
名称:多重映射
特点:自动按元素下标的字典序升序排序;允许元素下标相同
常用成员函数:size();empty();insert();count();lower_bound();upper_bound();clear()
迭代器函数:begin();end()
##四大独立函数
- sort()
实现方式:sort(首地址,末地址+1,cmp)
降序排序:
int main()
{
int a[100],n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
cout<<a[i]<<endl;
return 0;
}
升序排序:
bool cmp(int a,int b)
{
return a>b;
)
int main()
{
int a[100],n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
cout<<a[i]<<endl;
return 0;
}
当需要对同时具有多个数据成员的结构体或类对象进行排序时,cmp函数可以写入分支语句。
- 随机数函数rand()
随机数函数rand()
返回值类型为int
如:
srand(time(10));//保证rand()自身的返回值循环情况不会出现
int a;
a=rand()%10;
该程序将a赋值为10以内的随机自然数。
- 去重函数unique()
返回值类型为iterator迭代器
删除相邻元素中的相同元素,并将相同元素的地址后移
返回值为去重后的尾地址
通常都是先排序再去重
- 全排列函数
next_permutation(初始地址,最终地址)
构造下一个全排列
有返回true,无返回false;
prev_permutation(初始地址,最终地址)
构造前一个全排列
有返回true,无返回false;
全排列的顺序按照字典序升序排列。基本成员函数简介
s.size()返回s的内存大小
s.empty()返回s是否为空
s.push_back()在s后添加一个变量
s.pop_back()在s后删除一个变量
s.top()返回s的第一个元素
s.front()返回s的第一个元素
s.back()返回s的最后一个元素
s.begin()返回s的第一个元素的地址
s.end()返回s的最后一个元素的地址
s.clear()清空s的所有元素
s.erase()在s内删除相同元素并返回该元素的个数
s.insert()在s内添加一个元素并返回该元素的地址
s.count()查找元素并返回元素的个数
s.lower_bound()返回>=参数的第一个成员的地址
s.upper_bound()返回>参数的第一个成员的地址
我的想法
就暂时来看STL能在编写代码时节省很多语句,还有一些繁琐的语法规则。另外,说到底,STL只是一个工具,如何更为巧妙地运用它来解决更为复杂的问题还有待我再不断的训练中继续发掘。