快手面试手撕算法题的时候,我选择用传统的双指针做,面试官在结束的时候问了我一句,为什么不用STL提供的方法呢,会更方便。想了想还挺有道理的,传统方法光能体现算法的功底,但真正实践中还是怎么方便怎么来。于是准备粗略记录一下刚学会用的一些方法。
list
emplace
在容器中的指定位置插入元素。该函数和 insert() 功能相同,但效率更高。
// 在指定位置pos插入之后value,返回刚插入数据的迭代器it
list<Type>::iterator it = emplace(list<Type>::iterator pos, Type value...)
splice
将一个 list 容器中的元素插入到另一个容器的指定位置。
// 把整个list2,插入到list1的list1_it位置
list1.splice(list<Type>::iterator list1_it, list<Type> list2);
// 把list2的list2_it位置的值,插入到list1的list1_it位置
list1.splice(list<Type>::iterator list1_it, list2, list<Type> list2, list<Type>::iterator list2_it);
// 把list2的list2_bit到list2_eit位之间的值,插入到list1的list1_it位置,做闭右开
list1.splice(list<Type>::iterator list1_it, list2, list<Type> list2, list<Type>::iterator list2_bit, list<Type>::iterator list2_eit);
algorithm库函数
remove
// 将容器中在begin, end范围内的等于value的值全部清除(左闭右开),注意:他的remove是把后面的移上来,想要彻底去除还要配合erase
STL::iterator it = remove(STL::iterator begin, STL::iterator end, Type value)