【原创】C++中vector的remove()函数

话不多说,直接来

remove()干了什么:
把被删除元素 后面的元素 移动到当前被删除元素位置,返回最后一个被改变值的下一个迭代器。。

举栗:

// 首先,定义一个vectorvector<int> demo = {1,3,3,4,3,5,6};

vector的对应值分别为:
1,3,3,4,3,5,6

// 调用remove函数vector<int>:: iterator demo_return = remove(demo.begin(), demo.end(), 3);
打印查看最终结果
cout << "remove() return:" <<endl;for(auto iter = demo_return; iter != demo_return.end(); ++iter){        cout << *iter << ' ';    }cout << endl;cout << "after remove():" << endl;for(auto iter = demo.begin(); iter != demo.end(); ++iter){        cout << *iter << ' ';} 
remove() return:3 5 6 after remove():1 4 5 6 3 5 6

可以看到,最终结果:

remove函数返回值是:3,5,6

在remove函数操作后vector为:1,4,5,6,3,5,6

它到底做了什么?

还是那句话:
把被删除元素 后面的元素 移动到当前被删除元素位置,返回最后一个被改变值的下一个迭代器。。
源码如下:

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;}

大致流程如下:

  1. first指针找到第一个匹配元素;
  2. 索引 i 指向 first 所指元素;
  3. 索引i向后遍历,找到与first不同的元素,赋值给first指向元素,first指针后移;
  4. 循环第3步。(索引i到vector末尾结束循环)

画图解释一下
image

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYwrR4G0' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片