c++ std::vector 删除指定元素的两种形式

#include <iostream>
#include <vector>
#include <algorithm>
#include <memory>

using namespace std;
class Display
{
    public:
    Display(int pid):removeBoo(false)
    {
        id = pid;
    }
    ~Display()
    {

    }
    void showInfo(){
        cout << "dispatch evt id: "<< id << endl;
    }
    //
    bool removeBoo;
    //
    int getId(){
        return id;
    }
    private:
        int id;
};
std::vector<std::shared_ptr<Display>> s_display_vec;
// 不需要保持原有顺序的
void removeEleTest1()
        {
            std::vector <std::shared_ptr<Display>>::iterator iter = s_display_vec.begin();
            for (; iter != s_display_vec.end();)
            {
                if ((*iter)->removeBoo) {
                    std::swap(*iter,s_display_vec.back());
                    s_display_vec.pop_back();
            // c++11这样做没必要
//if(s_display_vec.size() < 1) break;
} else { (*iter)->showInfo(); ++iter; } } } ///* // 需要保持原有顺序的 void removeEleTest2() { std::vector <std::shared_ptr<Display>>::iterator iter = s_display_vec.begin(); for (; iter != s_display_vec.end();) { if ((*iter)->removeBoo) { // 在这里将target的标记,记录为未加入列表 //(*iter) if (iter == s_display_vec.end()) { cout << "--a delete " <<(*iter)->getId()<<"--"<< endl; s_display_vec.pop_back(); break; } else { cout << "--b delete " <<(*iter)->getId()<<"--"<< endl; iter = s_display_vec.erase(iter); } } else { (*iter)->showInfo(); ++iter; } } } //*/ int main() { cout << "Hello world!" << endl; //int j = 0; std::shared_ptr<Display> dp_0 = std::make_shared<Display>(0); std::shared_ptr<Display> dp_1 = std::make_shared<Display>(1); std::shared_ptr<Display> dp_2 = std::make_shared<Display>(2); std::shared_ptr<Display> dp_3 = std::make_shared<Display>(3); std::shared_ptr<Display> dp_4 = std::make_shared<Display>(4); ///* s_display_vec.push_back(dp_0); s_display_vec.push_back(dp_1); s_display_vec.push_back(dp_2); s_display_vec.push_back(dp_3); s_display_vec.push_back(dp_4); cout << "s_display_vec.size: "<< s_display_vec.size() << endl; cout << "------------------" << endl; // 设置哪一个可以被删除 dp_3->removeBoo = true; removeEleTest2(); cout << "----------aaa--------" << endl; removeEleTest2(); cout << "s_display_vec.size: "<< s_display_vec.size() << endl; //*/ return 0; }

 

转载于:https://www.cnblogs.com/vilyLei/articles/8439575.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值