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

发布时间:2024年01月11日

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);
文章来源:https://blog.csdn.net/qq_37346140/article/details/135529438
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。