C++进阶:STL算法11--移除

1. 简介

函数 作用 文档
remove(beg,end,val) 删除[beg,end)内所有等于val的元素。注意,该函数不是真正删除函数。 remove()
remove_if(beg,end,pred) 删除[beg,end)内pred结果为true的元素。 remove_if()
remove_copy(beg,end,res,val) 将所有不等于val元素复制到res,返回OutputIterator指向被拷贝的末元素的下一个位置。 remove_copy()
remove_copy_if(beg,end,res,pred) 将所有使pred结果为true的元素拷贝到res remove_copy_if()

只是位置改变,不是真正的删除。

2. 示例代码

  • remove
// remove algorithm example
#include      // std::cout
#include     // std::remove

int main () {
  int myints[] = {10,20,30,30,20,10,10,20};      // 10 20 30 30 20 10 10 20

  // bounds of range:
  int* pbegin = myints;                          // ^
  int* pend = myints+sizeof(myints)/sizeof(int); // ^                       ^

  pend = std::remove (pbegin, pend, 20);         // 10 30 30 10 10 ?  ?  ?
                                                 // ^              ^
  std::cout << "range contains:";
  for (int* p=pbegin; p!=pend; ++p)
    std::cout << ' ' << *p;
  std::cout << '\n';

  return 0;
}
  • remove_if
// remove_if example
#include      // std::cout
#include     // std::remove_if

bool IsOdd (int i) { return ((i%2)==1); }

int main () {
  int myints[] = {1,2,3,4,5,6,7,8,9};            // 1 2 3 4 5 6 7 8 9

  // bounds of range:
  int* pbegin = myints;                          // ^
  int* pend = myints+sizeof(myints)/sizeof(int); // ^                 ^

  pend = std::remove_if (pbegin, pend, IsOdd);   // 2 4 6 8 ? ? ? ? ?
                                                 // ^       ^
  std::cout << "the range contains:";
  for (int* p=pbegin; p!=pend; ++p)
    std::cout << ' ' << *p;
  std::cout << '\n';

  return 0;
}
  • remove_copy
// remove_copy example
#include      // std::cout
#include     // std::remove_copy
#include        // std::vector

int main () {
  int myints[] = {10,20,30,30,20,10,10,20};               // 10 20 30 30 20 10 10 20
  std::vector myvector (8);

  std::remove_copy (myints,myints+8,myvector.begin(),20); // 10 30 30 10 10 0 0 0

  std::cout << "myvector contains:";
  for (std::vector::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}
  • remove_copy_if
// remove_copy_if example
#include      // std::cout
#include     // std::remove_copy_if
#include        // std::vector

bool IsOdd (int i) { return ((i%2)==1); }

int main () {
  int myints[] = {1,2,3,4,5,6,7,8,9};
  std::vector myvector (9);

  std::remove_copy_if (myints,myints+9,myvector.begin(),IsOdd);

  std::cout << "myvector contains:";
  for (std::vector::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

3. 练习

你可能感兴趣的:(C++进阶:STL算法11--移除)