C++ STL相关知识点积累之增删改查

本文介绍了在C++中高效删除vector中指定元素的方法,包括使用swap和pop_back以及find和erase,同时讨论了不同情况下的选择。还涵盖了如何在string、vector、set和map中查找指定元素并获取其索引或确认是否存在。
摘要由CSDN通过智能技术生成

1、删除vector中指定元素

1、先用swap把要删除的元素和vector里最后一个元素交换位置,然后把最后一个元素pop_back

std::swap(*it, observers_.back());
observers_.pop_back();

2、先用find查找元素,然后用erase删除元素

Iterator it = std::find(observers_.begin(), observers_.end(), x);
observers_.erase(it);

1的效率高,2删除元素后需要把后面的元素依次向前移动,但有时会要求不能改变vector中元素顺序,此时只能使用2。

2、 判断string、vector/set/map中是否存在指定元素(返回索引值)

string

  • find(value),如果存在返回value第一次出现的索引位置,不存在则返回string::npos。
     string a= "abcdefghigklmn" ;
     string b= "def" ;
     string c= "123" ;
     if (a.find(b)== string::npos ) //不存在。
         cout <<  "not found\n" ;
     else 
         cout << "found\n" ; 

vector/set/map

  • find(a.begin(),a.end(),value)
    如果在查找的范围内找到了返回的是value的地址,如果没找到返回的是地址a+length或a.end()。
    string 中的find()函数查找第一次出现的目标字符串。如果找不到的话返回s.npos(结尾位置)。
   std::vector<int> vec = {10, 20, 30, 40, 50};
   int targetElement = 30;
 
   auto itr = std::find(vec.begin(), vec.end(), targetElement);
   if (itr != vec.end()) {
      size_t index = std::distance(vec.begin(), itr);
      std::cout << "The element is found at index: " << index << std::endl;
   } else {
      std::cout << "The element is not found in the vector." << std::endl;
   }
  • count(begin,end,‘a’),其中begin指的是起始地址,end指的是结束地址,第三个参数指的是需要查找的字符’a’。
    vector<int> numbers = {1, 2, 2, 3, 2, 4, 5, 2};
    int value= 2;
    int count = count(numbers.begin(), numbers.end(), value);

补充:若要从指定位置处开始遍历,直接将numbers.begin()+i即可,i表示索引位置。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我宿孤栈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值