开发者

C++中vector与remove()函数详解

目录
  • C++中vector与remove()函数
  • 它到底做了什么?
  • 后续

C++中vector与remove()函数

话不多说,直接来

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

举栗:

// 首先,定义一个vector
vector<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,6www.devze.com,3,5,6

它到底做了什么?

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

remove(_ForwardIteratophpr __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 指向 fFYPkZZsUDRirst 所指元素;
  • 索引i向后遍历,找到与first不同的元素,赋值给first指向元素,first指针后移;
  • 循环第3步。(索引i到vector末尾结束循环)

画图解释一下

C++中vector与remove()函数详解

后续

这样可以用来做什么?首先,返回的first迭代器,刚好是我们所要vector的末尾。也就是说demo.begin()到remove(3),是我们所需的vector(即删掉3)但是我们会发现,其实还有元素留在vector里(它的size容量大小没有改变)所以可以通过erase操作,把后面的删了(size容量变小,但是capacity容量不变)

最终返回的结果:

1 4 5 6

到此这篇关于C++中vector与remove()函数的文章就介绍到这了,更多相关C++ vector与remove()函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜