DAY1 STL基础

本文详细介绍了C++中的STL(标准模板库),包括容器如string、vector、queue、stack、set、map、list等的使用方法,以及sort、reverse、next_permutation等函数的应用。还提到了STL在各种数据结构和算法中的优势以及在编程比赛中的注意事项和资源推荐。
摘要由CSDN通过智能技术生成

容器

string vector queue stack set map list

String 字符串

迭代器:string::iterator it=s1.begin()

函数

  1. clear()
  2. length()
  3. push_back() //在最后插入
  4. append() // append(n,’ ') 在最后插入n个‘ ’ append(str2,n,m) 在后面插入str2 中第n个开始插入m个字符 n,m可以省略
  5. find() // find(x,pos) 从第pos个位置开始找x pos可省略
  6. erase()
    //erase(pos,n) 删除从pos开始的n个字符 n省略则只去掉一个 //erase(s.begin()+1,s.end()-1) 从begin+1删到end-1 这里两个需要都是迭代器

Vector 向量

动态数组,内存连续
可以随机访问

构造函数:

  1. vector< int > v1;
  2. vector< string > v2(“1234”);
  3. vecotr< int > v3(5,2); // 22222
  4. vector< int > v4(v3);

常用函数:

  1. push_back()
  2. pop_back()
  3. front()
  4. back()
  5. insert() // insert(iterator,value)
  6. erase()
  7. size()

Queue 队列

先进先出(FIFO)

构造函数queuequ;

常用函数:

  1. push()
  2. pop()
  3. front()
  4. back()
  5. size()
  6. empty() // 清空

Priority_queue 优先队列

他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队
即值越大的在越上边
priority_queue <int,vector<int>,greater<int> > 升序队列
priority_queue <int,vector<int>,less<int> > 降序队列

Deque 双端队列

双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

Deque 介绍

http://www.cplusplus.com/reference/deque/deque/

Stack 堆栈

先进后出(FILO)

构造函数stackst;

常用函数:

  1. push()
  2. pop()
  3. top()
  4. size()
  5. empty()

Set 集合

元素有序排列、不重复

查询、插入、删除O(logn)

构造函数:set<int> se;

常用函数:

  1. insert()

  2. erase()

  3. find()

  4. size()

  5. clear()

  6. count() // count(value) 数value有几个 (只有0和1)

  7. lower_bound(x):大于等于x的第一个元素位置,不存在返回end() 返回迭代器 
    要知道第几个需要lower_bound(v.begin(), v.end(), 2) - v.begin()

  8. upper_bound(x):大于x的第一个元素位置,不存在返回end()

Multiset

C++语言中,multiset是<set>库中一个非常有用的类型
它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成
而且他能时刻保证序列中的数是有序的,而且序列中可以存在重复的数。

构造函数:multiset<int> h;

Map 字典

key-value键值对,按key有序排列
插入、删除O(logn)

可以通过[ ]访问

构造函数:map<int,int>;

常用函数:

  1. erase()
  2. find()
  3. size()
  4. clear()
  5. count()
  6. lower_bound()
  7. upper_bound()

Unordered_map

Unordered_map

用法与 Map 相差不大

优点: 因为内部实现了哈希表,因此其查找速度非常的快
缺点: 哈希表的建立比较耗费时间
适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map

List 双向链表

内存不连续
不支持随机访问
插入、删除O(1)
原理图

构造函数:list<int> li;

常用函数:

  1. push_back()
  2. push_front()
  3. pop_back()
  4. pop_front()
  5. insert()
  6. erase()

函数

sort reverse next_permutation

Sort 排序

vector<int>ve({4,3,5,2,6,1}); 
sort(ve.begin(),ve.end());  // ve全排序
sort(ve.begin(),ve.end(),greater<int>()); // 倒叙排序

bool cmp(int a,int b)
{
	if(a%2==b%2) return a<b;
	return a%2>b%2;
}
sort(ve.begin(),ve.end(),cmp);  // 奇偶分离

Reverse 翻转

翻转数组、容器

  1. int x[1005];
  2. reverse(x+1,x+1+n);
  3. vector<int>ve;
  4. reverse(ve.begin(),ve.end());

Next_permutation 更大的字典序

求全排列中字典序更大的一个序列,不存在更大时返回false

int x[105];
int n=5;
for(int i=1;i<=n;i++)x[i]=i;
while(pre_permutation(x+1,x+1+n)); //找到最小的一组
do{
	for(int i=1;i<=n;i++)printf("%d ",x[i]);
	puts("");
}while(next_permutation(x+1,x+1+n));

基础TIPS

  1. 绝大部分情况下用C++(效率高、code速度快),少数情况用Java(有大数)、Python(兼容度不高)

  2. 输入输出:cin cout

  3. 万能头文件 #include<bits/stdc++.h> VS需要自己装入相应头文件

  4. 数组尽量放全局
    数组尽量开大

  5. 结构体有时候不能比较大小 需要重新定义

struct STR
{
   int a;
   int b;
   bool friend operator <(STR a,STR b)
   {
       return x1.a<x2.a;
   }
};

相关比赛限制

  1. 一秒钟可以执行多少次运算? 8e8
  2. 1G内存可以开多大数组?
    int 2e8
    256MB 5e7

可参考网站

https://vjudge.net/
https://www.nowcoder.com/
https://pintia.cn/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值