【原创】C++中vector的remove()函数_天天观察
(资料图)
话不多说,直接来
remove()干了什么:把要删除元素后面的值移动到前面,返回最后一个被改变值的下一个迭代器。
举栗:
// 首先,定义一个vectorvector demo = {1,3,3,4,3,5};
vector的对应值分别为:1,3,3,4,3,5
// 调用remove函数vector:: iterator demo_return = remove(demo.begin(), demo.end(), 3);
打印查看最终结果
cout << "remove() return:" <
remove() return:4 3 5 after remove():1 4 5 4 3 5
remove函数返回值是:4,3,5
在remove函数操作后vector为:1,4,5,4,3,5
它到底做了什么?还是那句话:把要删除元素后面的值移动到前面,返回最后一个被改变值的下一个迭代器。源码如下:
remove(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value_){ __first = _VSTD::find(__first, __last, __value_); if (__first != __last) { _ForwardIterator __i = __first; while (++__i != __last) { if (!(*__i == __value_)) { *__first = _VSTD::move(*__i); ++__first; } } } return __first;}
大致流程如下:
first指针找到第一个匹配元素;索引 i 指向 first 所指元素;索引i向后遍历,找到与first不同的元素,赋值给first指向元素,first指针后移;循环第3步。(索引i到vector末尾结束循环)画图解释一下
关键词: