暑假acwing算法总结11:STL总结

  • 1、vector
  • 倍增自变长数组,插入均摊o(1)
  • size() 返回元素个数
  • empty() 判断是否为空
  • clear() 清空
  • front()/back() 返回第一/最后一个数
  • push_back()/pop_back() 添加/删除元素
  • begin()/end() 首/尾迭代器
  • 遍历方式
for(int i=0;i<s.size();i++)cout<<a[i]<<' ';
for(auto x:s)cout<<x<<' ';
for(vector<int>::iterator i=s.begin();i<s,end();i++)
cout<<*i<<' ';
  • 支持按字典序比较vector的大小
vector<int>(4,3) < vector<int>(3,4);
  • [ ]可以取值
  • 2、pair
  • 存储一个任意类型的二元组
  • 用first调用第一个元素,second调用第二个元素
  • 支持按字典序比较pair大小首先依据first然后依据second,可以sort排序
  • pair的赋值方式
pair<int,string>p
p=make_pair(10,zjk);
p={10,zjk};
  • 3、string
  • size()/length() 返回元素个数
  • empty() 返回字符串是否为空
  • clear() 清空字符串
  • 支持在定义的字符串后面直接添加字符串或者字符
string a;
cin>>a;
a+='a';
a+="abc";
  • 常用函数substr(起始位置(从0开始),子串长度(超过母串长度输出到最后为止省略掉该参数,返回从起始位置到最后的所有字符))
string a="abcdefg"
cout<<substr(3,3)<<endl;
//输出def
  • 常用函数c_str()返回string对应字符串的起始位置方便用printf输出
string a="abcdefg";
printf("%s",a.c_str());
//输出abcdefg
  • to_string()将一个数字变成对应的字符串
  • 4、queue
  • push() 向队尾插入一个元素
  • front() 返回队头元素
  • back() 返回队尾元素
  • pop() 弹出删除队头元素
  • size() 返回元素个数
  • empty() 判断是否为空
  • 没有clear()和priority_queue,stack一样,想清空这些直接重新定义一个就好了
queue<int>q;
q.push(1);
q=queue<int>();
  • 5、priority_queue
  • push() 插入一个元素
  • top() 返回堆顶元素
  • pop() 弹出删除堆顶元素
  • 默认是大根堆,要想换成小根堆插入的时候直接插入-x就好,-x从大到小就是x从小到大输出-1*top()
  • 或者直接定义小根堆
priority_queue<int>heap//大根堆
priority_queue<int,vector<int>,greater<int>>heap//小根堆
  • 6、stack
  • push() 向栈顶插入一个元素
  • top() 输出栈顶元素
  • pop() 弹出删除栈顶元素
  • size() 返回元素个数
  • empty() 判断是否为空
  • deque
  • size() 返回元素个数
  • empty() 判断是否为空
  • clear() 清空双端队列
  • front() 返回第一个元素
  • back() 返回最后一个元素
  • push_back()/pop_back() 在队尾插入/弹出一个元素
  • push_front()/pop_front() 在队首插入/弹出一个元素
  • begin()/end() 首/尾迭代器
  • [ ]可以取值
  • 效率较低
  • 7、set
  • 增删改查logn
  • set库函数包含set和multiset
  • set里面插入重复元素会被忽略,multiset里面可以有重复元素
  • size() 返回元素个数
  • empty() 判断是否为空
  • clear() 清空集合
  • begin()/end() 首/尾迭代器
  • insert() 插入一个数
  • find() 查找一个数,返回该数出现的迭代器,要是最后没找到返回end(),取地址输出元素值
  • count() 返回一个数出现的次数
  • erase() 要是输入一个数删除所有该数o(k+logn)k是该元素个数,要是输入一个迭代器,删除该迭代器
  • lower_bound()/upper_bound() 返回大于等于x的第一个元素的迭代器,返回大于x的第一个元素的迭代器,取地址得值
  • 8、map
  • 增删改查logn
  • map库函数包括map和multimap
  • size() 返回元素组个数
  • empty() 判断是否为空
  • clear() 清空map
  • insert() 插入一组数({ })
  • erase() 删除pair或者迭代器
  • find() 查找一个数,返回该数出现的迭代器,要是最后没找到返回end(),取地址输出元素值
  • [ ]可以取值 o(logn)
  • lower_bound()/upper_bound()
  • 9、unordered_map、unordered_multimap、unordered_set、unordered_multiset
  • 增删改查都是o(1)但是因为内部无序不支持lower_bound()和upper_bound()操作
  • 不支持迭代器的加加减减,和排序有关的都不支持
  • 10、bitset
  • 压位,开一个10000X10000的bool数组不能直接开要压位
  • 定义bitset<10000>s;
  • 支持 | & ^ ~ != == >> << [ ]
  • count() 返回有多少个1
  • any() 判断是否至少有一个1
  • none() 判断是否全为0
  • set() 把所有位置成1
  • set(k,v) 将第k位变成v
  • reset() 把所有位变成0
  • flip() 把所有位取反
  • flip(k) 把第k位取反
  • 2021-07-13写于南宁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值