连续删除Vector前几个后者后几个元素

本文介绍了一个实用的C++示例代码,演示如何使用vector容器进行基本操作,包括元素的添加、遍历、删除等,并提供了具体的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 使用C++操作vector,经常会出错。查了网上,发现这个方法比较实用。自己整理了一下。供大家参考。

#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;

int main()
{

    int mLong=20;
    //产生20个元素
    std::vector<double> mVec;
    for(int i=0;i<mLong;i++)
    {
       mVec.push_back((double)i);
    }
    //打印10个数据
    for(int i=0;i<mLong;i++)
    {
        cout<<"mVec"<<"["<<i<<"]="<<mVec[i]<<endl;
    }
     cout<<"delete front 5 data----------------------"<<endl;
    //删除前5个元素
    std::vector<double>::iterator iter;

    for(iter=mVec.begin();mVec.size()>15;)
    {
        iter=mVec.erase(iter);
    }
    //打印
    for(int i=0;i<mVec.size();i++)
    {
        cout<<"mVec"<<"["<<i<<"]="<<mVec[i]<<endl;
    }
        cout<<"delete bak 5 data----------------------"<<endl;
    //删除后面的元素,直到保留10个元素
    while(mVec.size()>10)
    {
         mVec.pop_back();
    }
    //打印
    for(int i=0;i<mVec.size();i++)
    {
        cout<<"mVec"<<"["<<i<<"]="<<mVec[i]<<endl;
    }

    return 0;
}

 

### C++ 中 `vector<int>` 删除元素的方法 在 C++ 中,`std::vector` 提供了多种方法来删除其内部存储的元素。以下是几种常见的删除操作及其具体实现: #### 1. 使用 `erase()` 方法删除指定位置的单个元素 如果需要删除某个特定索引处的元素,可以使用 `erase(iterator)` 函数。该函数接受一个迭代器作为参数,并移除对应位置上的元素。 ```cpp #include <iostream> #include <vector> void deleteElementAtPosition(std::vector<int>& vec, size_t pos) { if (pos >= vec.size()) { std::cerr << "Index out of bounds!" << std::endl; return; } vec.erase(vec.begin() + pos); } int main() { std::vector<int> numbers = {10, 20, 30, 40, 50}; deleteElementAtPosition(numbers, 2); // 删除索引为2的元素(即30) for (const auto& num : numbers) { std::cout << num << " "; } } ``` 上述代码展示了如何通过传递目标索引来调用自定义函数完成删除动作[^2]。 #### 2. 移除范围内的多个连续项 当希望一次性清除一系列相邻项目时,则可利用带两个参数版本的 erase 函数——它接收一对表示起始与终止边界的迭代器。 ```cpp vec.erase(vec.begin()+start_index, vec.begin()+end_index); // 这里 start_index 和 end_index 是你想删掉部分的第一个和最后一个元素之后的位置. ``` 例如,在下面的例子中我们将从第三个到第五个(不包括第六个)整数抹去: ```cpp numbers.erase(numbers.begin()+2, numbers.begin()+5); ``` 这会把原来位于下标2至4之间的那些数值全部剔除出去. #### 3. 清空整个向量的内容 假如想要彻底销毁当实例所含有的所有成员变量的话,那么可以直接调用 clear 成员方法即可达成目的. ```cpp myVector.clear(); ``` 执行此命令后,虽然容器本身依旧存在,但是它的大小变为零,所有的数据都被释放掉了. #### 4. 基于条件筛选并批量去除满足准则者 有时候我们可能并不知道确切待处理项目的实际地址或者编号信息,而是依据某些逻辑判断标准来进行挑选后再做进一步处置工作。此时就可以借助 STL 库里的 remove_if 配合上 lambda 表达式共同协作解决问题啦! ```cpp auto isEven = [](int value){return !(value % 2);}; numbers.erase(remove_if(numbers.begin(), numbers.end(),isEven),numbers.end()); ``` 这里创建了一个匿名函数用来检测传入数字是否能被二整除无余数,如果是则返回 true 。接着把这个谓词交给算法库中的 remove_if ,后者负责重新排列原始序列使得不符合要求的部分聚集在一起形成新的有效区间末端标记 point_of_new_end 。最后再拿这个新端点配合原结束标志一起送进 erase 来真正意义上把这些不需要的东西给踢走. --- ### 注意事项 - 调用任何修改结构的操作之都应该确认不会越界访问以免引发未定义行为。 - 如果频繁增删节点考虑选用链表(list)代替动态数组(vector),因为者在这方面效率更高一些[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马鸣风萧萧222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值