2021-01-20 ACM训练笔记

Day1:基础知识 & STL

基础知识:
1、C++中的“万能”头文件 <bits\stdc++.h>
2、算法复杂度:
1.空间复杂度:可简单理解为程序所需内存空间越大,其空间复杂度越高。
2.时间复杂度:用函数T(n)表示当问题规模(需要处理的数据量)为n时,算法中的基本操作需要执行的次数;引入其同量级函数f(n)(即n趋于无穷时,有T(n) / f(n) = C, 其中C为任意非零常数),记作T(n) = O(f(n)); O(f(n))即称为算法的“渐进时间复杂度”,“简称为时间复杂度”。

STL:
1、STL的内容:
容器:string、 vector、 queue、 stack、 set、 map、 list;
函数:sort()、 reverse()、 next_permutation()
迭代器

2、string:字符串
构造:string str; string str (“这是初始内容”); 或 string str2 (str1);
常用方法:
size(); //返回当前字符串的大小,与length()等价
length(); //返回当前字符串的长度,与size()等价
empty(); //当前字符串是否为空
resize(int len, char c); //把字符串当前大小置为len,多去少补,字符c填充不足的部分
clear(); //清空,但并不释放内存
insert(pos, string); //在pos号位置插入字符串string
insert(it, it2, it3); //it为原字符串的欲插入位置,it2和it3为待插字符串的首位迭代器,用来表示串[it2, it3)将被插在it的位置上
earse(it); //删除单个元素,it为需要删除的元素的迭代器
earse(first, last); //其中first为需要删除的区间的起始迭代器,而则为需要删除的区间的 末尾迭代器的下一个地址,也即为删除[first, last)
push_back(value_type_Ch); //追加一个字符
append( const value_type* _Ptr, size_type _Count ); //追加字符串
append( const basic_string& _Str );
find(const basic_string& _Str); //寻找某一字符,返回下标,找不到返回-1

3、vector:向量,也可理解为动态数组,可随机访问
构造:vectorv; vectorv(“1234”); vecotrv(5,2); 或vectorv2(v1)
常用方法:
push_back(); //在末尾添加元素
pop_back(); //删除末尾元素
front(); //返回首部元素的迭代器
back(); //返回末尾元素的迭代器
insert(); //在指定位置插入元素
erase(); //删除迭代器指向的元素,删除后不能对传入的迭代器执行操作
size(); //返回大小
resize(int n,element); //将大小设置为n,扩容出的元素的值为element,默认为0

4、queue:队列,FIFO
构造:queuequ
常用方法:
push(); //在末尾加入一个元素
pop(); //删去首部元素,无返回值,队列为空时将引起错误
front(); //返回首部元素的值
back(); //返回末尾元素的值
size(); //返回队列大小
empty(); //判断是否为空

5、stack:堆栈,FILO
构造:stackst
常用方法:
push(); //压入一个元素
pop(); //弹出一个元素,无返回值,为空时将引起错误
top(); //返回堆栈顶部(最后压入的)元素的值
size(); //返回堆栈的大小
empty(); //判断是否为空

6、set:集合,内部元素有序排列,且不会重复
构造:setse
常用方法:
insert(); //插入元素
erase(); //删除元素
find(); //查找对应元素的迭代器,查找失败返回end()
size(); //返回大小
clear(); //清空
count(); //返回被查找元素的个数(0或1)
lower_bound(x); //大于等于x的第一个元素的迭代器,不存在返回end()
upper_bound(x); //大于x的第一个元素的迭代器,不存在返回end()

7、map:建立key-value对应关系
构造:map<int,int>mp //<key的类型,value的类型>
随机访问:像数组一样通过mp[key]访问对应value;对同一key赋值会覆盖旧值,若该key并无对应value则返回0
常用方法:
erase(); //传入key值,删除对应元素
find(); //返回指向对应元素的迭代器,查找失败返回end()
size(); //返回大小
clear(); //清空
count(); //返回被查找元素的个数(0或1)
lower_bound(); //返回大于等于x的第一个元素的迭代器,不存在返回end()
upper_bound(); //返回大于x的第一个元素的迭代器,不存在返回end()

8、list:双向链表
构造:listli
不支持随机访问
常用方法:
push_back(); //在末尾插入元素
push_front(); //在首部插入元素
pop_back(); //删除末尾元素
pop_front(); //删除首部元素
insert(); //传入指向指定位置的迭代器和新元素,将新元素插入到指定位置
erase(); //删除传入的迭代器指向的元素,删除后不能对传入的迭代器执行操作

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值