(计蒜客)基础数据结构学习总结

string

string详解

动态数组(vector)

vector<数据类型>name

  1. 插入1:name.push_back//在动态数字最后一个添加
  2. 插入2:insert(it,x)//it是迭代器
  3. 获取长度:name.size()
  4. 删除:pop_back();
  5. 擦擦:erase[it],或者erase[begin,end]—[begin,end)//擦掉区间的值;
  6. 清空(划重点!!):clear函数虽然能清空vector,但是并不能清掉开的内存。有一种方法可以,定义一个空的vector,然后swap例子:
 vector<int>a{
 vector<int>b;
 a.swap(b);//a是已经clear()的栈:
 }

例题:
打印锯齿矩阵
堆积木
最后说明动态数组:可以嵌套使用,也可以是个数组(name)//vectora[100]或者vector<vector >a;
在常用的STL容器中,只有在vector和string中,才允许使用vi.begin()+x这种迭代器加上整数的写法。(这里的x指代常数)

集合(set)

不存在相同的元素;

  1. 插入:insert()
  2. 删除:erase()
  3. 查找:count();
  4. 获取个数:size();

映射(map)

  1. 插入需要借助元祖,或者直接定义
  2. 访问:直接dic[];
  3. 查找:count();
  4. first是key,second是value

栈(stack)

例题;
网页跳转//栈的用法很灵活,有时候需要一个或两个;

队列(queue)

  1. 出列:pop
  2. 入列:push
  3. 队首:front
  4. 是否为空:empty()

优先队列(priority_queue)

优先队列与队列一样(只不过优先队列是可以自动排序的 )
这里有个知识点,c++里的运算符重载,个人感觉目前看不太懂;
不过,没关系,从大到小排就用:
priority(int n,vector,less)
从大到小排就用
priority(int n.vector,greater)
当然也可以用元组来排序,先比第一个的大小,然后再比第二个;
例题
任务系统
n个最小和

双端队列(deque)

deque模版类 double-ended queue(双端队列) ,支持随机访问
支持前插和后插,比stack,queue更灵活;
deque用法全解

并查集

并查集有普通的,还有带权的;
主要有初始化,查找,合并三个操作(这里没有stl库所以需要自己来做)
初始化:一般是一个超大的数组,带权的是两是他们a[i]=i(如果还要满足其他关系的话就再设一个数组)//个人感觉这里是逻辑结构(想要增加限制,就要增加数组)
查找:我一般习惯用get(),这里还伴随者一个压缩和路径合成操作(这里也是我感觉最难的一个地方)

int get(int x)
{
	if(father[x]==x)return x;
	int y=father[x];
	father[x]=get(x);//这里就是树压缩了!!
	r[x]=(r[x]+r[y]+3)%3;//这里就是路径和层了(一条链的栈)
	return father[x];
}

例题:
朋友
网络交友
找出所有谎言
接龙

总结

通过着一段时间的学习,个人感觉自己不管是代码能力和逻辑思维能力上都有了长足的进步.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值