AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

vector复习

作者: 作者的头像   well188 ,  2021-01-14 08:52:32 ,  阅读 36


0


1

我认为:基本的数组、vector、deque,这3种数据结构在 noi 考试中有不可替代的作用,其他的结构大概都可以拿这3种基本结构模拟。个人认为,在算法竞赛中,出题人不会直接出个语法题让你直接做,总要绕点弯,才能显示出题人的水平嘛,这里面就是要给“拆”字:拆散、加料,组合的过程。而STL是不能拆的,我们只能拆自己模拟的数据结构。所以这3种可以模拟其他结构的结构就太重要了。deque加进来是因为它有一个O(1)的头插。

复习vector

复习是为了记住,而要记住当然字越少越好,只记必须记的,所以我就画了一张图,每次用到vector的时候,我就头脑中想象这种图,把它牢牢的记在心里。
vector.png ]

重点说明

1、查找和替换函数在 algorithm 中。
2、clear函数不能把元素置0,只是把size置0,请自行保证访问的元素下标前用size去判断是否合法。
3、vector 置 0,用 assign 函数,v.assign(v.size(),0) ,还可以用 fill(v.begin(),v.end(),0) ,经过我的实测 assign 比 fill 快 30% 左右。
4、rbegin, rend 函数要使用逆迭代器:vector<int>::reverse_iterator rit
5、删除erase函数返回一个指向删除元素后的元素的迭代器,所以删除用for循环要小心多加一次导致跳过某个元素。最好用while循环,因为删除使迭代器已经自动跳到删除后的元素上。
6、有2种删除方式,删除一个,删除一片。v.erase(pos),v.erase(first,last)
7、插入insert函数返回指向插入的第一个元素的迭代器。插入有3种方式,插入1个,插入多个同样的值,插入一片值。
v.insert(pos,value),v.insert(pos,n,value),v.insert(pos,first,last),注意都是插到pos前面。
8、插入和删除都可能引发迭代器失效。因为插入会导致重新分配内存,以及插入位置后面的元素向后移动。删除中间元素同样会导致删除后面的元素向前移动,进而使迭代器失效。

链接

vector迭代器失效详解
vector模拟set

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息