Effective STL -- 5. Algorithm

来源:互联网 发布:2017淘宝税收新政策 编辑:程序博客网 时间:2024/06/06 04:07

30. 确保目标区间足够大

  vector<int> values;  vector<int> results;  transform(values.begin(), values.end(),            back_inserter(results),//back_inserter返回迭代器将使得push_back被调用(vector,string,deque, list)            transmogrify);    list<int> results;  transform(values.rbegin(), values.rend(),            front_inserter(results),//font_inserter返回迭代器将使得push_front调用(deque list)            transmogrify);
31. 了解各种于排序相关的选择

如果需要对vector, string, deque 或者数组中元素进行一次完全排序,那么可以使用sort或者stable_sort

  sort(vect.begin(), vect.end());  sort(vect.begin(), vect.end(), less<int>());
如果有一个vector, string, deque 或者素组,并且只需要对等价性最前面的n个元素进行排序,那么可以使用partial_sort

  partial_sort(vect.begin(), vect.begin()+5, vect.end(),less<student>());
如果...,并且需要找到第n个上面的元素,nth_element

nth_element(vect.begin(), vect.begin()+3, vect.end(),less<student>());
如果需要将一个标准序列容器中的元素按照是否满足某个条件区分开来,partion, stable partion

  partion(vect.begin, vect.end(), hasAcceptableQuality);
如果数组在list中,直接调用partion和stable_partion;用list::sort 代替sort stable_sort。


32. 如果确实需要删除元素,则需要在remove后调用erase

  v.erase(remove(v.begin(), v.end(), 99), v.end());

list 中 唯一一个 remove 是的确删除了容器中元素的函数

33. 对包含指针的容器使用remove时要特别小心


34.