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

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表示索引位置。

你可能感兴趣的:(#,C++,标准库STL,学习笔记,教程记录,c++,开发语言)