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++中的stack容器和queue容器操作代码

    C++中的stack容器和queue容器操作代码

    C++中stack和queue容器介绍,stack是一种先进后出的数据结构,而queue是一种先进先出的数据结构,本文通过实例代码介绍C++中的stack容器和queue容器,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • C语言 超详细讲解算法的时间复杂度和空间复杂度

    C语言 超详细讲解算法的时间复杂度和空间复杂度

    算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小
    2022-03-03
  • C/C++的内存管理你了解嘛

    C/C++的内存管理你了解嘛

    这篇文章主要为大家介绍了C/C++的内存管理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C/C++如何实现循环左移,循环右移

    C/C++如何实现循环左移,循环右移

    这篇文章主要介绍了C/C++如何实现循环左移,循环右移,具有很好的参考价值,希望对大家有所帮助。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C语言使用libZPlay录制声音并写到文件的方法

    C语言使用libZPlay录制声音并写到文件的方法

    这篇文章主要介绍了C语言使用libZPlay录制声音并写到文件的方法,实例分析了C语言操作音频文件的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C++中四种强制转换的实现方法与区别

    C++中四种强制转换的实现方法与区别

    这篇文章主要为大家详细介绍了C++中四种强制转换的实现方法与区别,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-06-06
  • 实现Dijkstra算法最短路径问题详解

    实现Dijkstra算法最短路径问题详解

    这篇文章主要介绍了实现Dijkstra算法最短路径问题详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C++左值引用、右值引用应用场景分析

    C++左值引用、右值引用应用场景分析

    本文给大家介绍C++左值引用、右值引用应用场景分析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-03-03
  • C语言实现歌手大奖赛计分程序

    C语言实现歌手大奖赛计分程序

    这篇文章主要为大家详细介绍了C语言实现歌手大奖赛计分程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C++ explicit构造函数实例解析

    C++ explicit构造函数实例解析

    这篇文章主要介绍了C++ explicit构造函数,需要的朋友可以参考下
    2014-07-07

最新评论