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

 更新时间:2023年06月28日 14:21:29   作者:Jev_0987  
这篇文章主要介绍了C++中vector与remove()函数,本文实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

C++中vector与remove()函数

话不多说,直接来

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

举栗:

// 首先,定义一个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,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;
}

大致流程如下:

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

画图解释一下

后续

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

最终返回的结果:

1 4 5 6

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

相关文章

  • 详解C++编程中用数组名作函数参数的方法

    详解C++编程中用数组名作函数参数的方法

    这篇文章主要介绍了详解C++编程中用数组名作函数参数的方法,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • MFC创建模态对话框和非模态对话框的方法

    MFC创建模态对话框和非模态对话框的方法

    这篇文章主要介绍了MFC创建模态对话框和非模态对话框的方法,需要的朋友可以参考下
    2014-07-07
  • C语言实现生日贺卡

    C语言实现生日贺卡

    这篇文章主要为大家详细介绍了C语言实现生日贺卡的具体方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • C语言实现弹跳小球

    C语言实现弹跳小球

    这篇文章主要为大家详细介绍了C语言实现弹跳小球,设置了小球分数及过关难度,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • c++中的bind使用方法

    c++中的bind使用方法

    bind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调用实体,这种机制在回调函数的使用过程中也颇为有用。接下来通过本文给大家介绍c++中的bind使用方法,感兴趣的朋友一起看看吧
    2022-01-01
  • C语言也有封装,继承和多态你知道吗

    C语言也有封装,继承和多态你知道吗

    这篇文章主要为大家详细介绍了C语言封装,继承,多态,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++实现消消乐游戏

    C++实现消消乐游戏

    这篇文章主要为大家详细介绍了C++实现消消乐游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C中的volatile使用方法

    C中的volatile使用方法

    volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错
    2013-02-02
  • C++数据结构哈希表详解

    C++数据结构哈希表详解

    C++标准库中使用的unordered_map底层实现是哈希表,下面这篇文章主要给大家介绍了关于C++中使用哈希表(unordered_map)的一些常用操作方法,需要的朋友可以参考下
    2022-07-07
  • C语言实现单词助手功能

    C语言实现单词助手功能

    这篇文章主要为大家详细介绍了C语言实现单词小助手,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10

最新评论