关于学到的一些新东西
刚刚结束了这次的周赛,最后一题还是没有写出来,但是学到了关于字符串的一些新知识:
这是原题:https://leetcode.cn/problems/design-a-text-editor/
现在大概知道怎么做了,通过两个双端队列模拟即可,根本不需要维护光标的位置,这样思考量大大减少了。
1.c++的string也有insert和erase函数,用法和vector等容器一样,这个我以前居然不知道…
2.还有一种做法就是利用双向链表模拟,这个我就是这样做的,但是debug把自己绕糊涂了,自己对这个数据结构感觉还是比较生疏,但是学到了几个比较有用的api:next()和prev()还有advance(), 这些都是对迭代器操作的一些函数,具体用法为
advance()的函数原型
1 | template< class InputIt, class Distance >void advance( InputIt& it, Distance n ); |
advance()的含义:
表示将输入迭代器it移动n个单位的步长,其中n可为正数与负数。注意:这里的输入迭代器为双向迭代器,即迭代器即可右移,也可左移。
若移动n个单位的步长后,超出迭代器范围[begin,end),则此行为未定义。
advance()函数返回值:
函数返回值为void,也就是将传入的迭代器用引用的方式移动n个单位了。
next()的函数原型:
1 | template< class ForwardIt >ForwardIt next( |
next()的含义:
表示迭代器右移n个单位的步长,即迭代器+n。
若移动n个单位的步长后,超出迭代器范围[begin,end),则此行为未定义。
next()函数返回值:
函数的返回值为一个迭代器,也就是传入迭代器右移n个单位后,返回这个移动后的新迭代器,其中n=1,可以省略第二个参数。
prev()的函数原型:
1 | template< class BidirIt >BidirIt prev( |
prev()函数返回值:
函数的返回值为一个迭代器,也就是传入迭代器左移n个单位后,返回这个移动后的新迭代器,其中n=1,可以省略第二个参数。
3.有关rope的学习
1 |
|
现在才知道c++ stl中有这么一个东西,它结合了数组和链表的优点,用于这个题非常合适,但是只适用于int和char数组。