C++ 算法 中的 remove_copy函数

首页 / C++入门教程 / C++ 算法 中的 remove_copy函数

C++算法 remove_copy()函数用于复制[first,last)参数内不等于val的所有元素,以提供结果而不会干扰其余元素的顺序。

此函数无法更改集合的大小。

  • 它将迭代器返回到参数的新末端。
  • 删除稳定。这意味着,未删除的元素的相对顺序保持不变。
  • 此函数使用operator ==将元素与给定的val比较。

remove_copy - 语法

template <class InputIterator, class OutputIterator, class T>
OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, const T& val);

remove_copy - 参数

first:前向迭代器,指向要从中删除元素的参数内第一个元素的位置。

last:正向迭代器,在要删除元素的参数内,将位置指向最后一个元素之后的位置。

result:一个输出迭代器,它指向要删除元素的参数的初始位置。

val :要从[first,last)参数中删除的值。

remove_copy - 返回值

指向复制参数的新结束位置(最后)的前向迭代器,其中包括[first,last)中的所有元素,但比较等于val的元素除外。

链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-algorithm-remove-copy-function.html

来源:LearnFk无涯教程网

remove_copy - 例子1

让我们看一个简单的示例来演示remove_copy()的用法:

#include <algorithm>
#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

int main() {
  vector<int> v = { 2,3,1,2,1 };
  
  remove_copy(v.begin(), v.end(),
    ostream_iterator<int>(cout, ","), 1);
    
    return 0;
}

输出:

2,3,2,

remove_copy - 例子2

让我们看另一个简单的例子:

无涯教程网

#include <iostream>    //std::cout
#include <algorithm>   //std::remove_copy
#include <vector>      //std::vector

using namespace std;

int main () {
  int myints[] = {10,20,50,30,20,10,40,20}; 
  vector<int> myvector (8);

  remove_copy (myints,myints+8,myvector.begin(),20); 

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

  return 0;
}

输出:

myvector contains: 10 50 30 10 40 0 0 0

remove_copy - 例子3

让我们看另一个简单的示例,以删除给定文本中的所有空格:

#include <algorithm>
#include <iterator>
#include <string>
#include <iostream>

using namespace std;

int main()
{
    string str = "Text with some   spaces";
    cout << "before: " << str << "\n";
 
    cout << "after:  ";
    remove_copy(str.begin(), str.end(),
                     ostream_iterator<char>(cout), ' ');
    cout << '\n';
    
    return 0;
}

输出:

before: Text with some   spaces
after:  Textwithsomespaces

remove_copy - 例子4

让我们看另一个简单的例子:

无涯教程网

#include <vector>  
#include <algorithm>  
#include <iostream>  
  
int main() {  
   using namespace std;  
   vector <int> v1, v2(10);  
   vector <int>::iterator Iter1, Iter2, new_end;  
  
   int i;  
   for ( i = 0 ; i <= 9 ; i++ )  
      v1.push_back( i );  
  
   int ii;  
   for ( ii = 0 ; ii <= 3 ; ii++ )  
      v1.push_back( 7 );  
  
   random_shuffle (v1.begin( ), v1.end( ) );  
   cout << "The original vector v1 is:     ( " ;  
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )  
      cout << *Iter1 << " ";  
   cout << ")." << endl;  
  
  //Remove elements with a value of 7  
   new_end = remove_copy ( v1.begin( ), v1.end( ), v2.begin( ), 7 );  
  
   cout << "Vector v1 is left unchanged as ( " ;  
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )  
      cout << *Iter1 << " ";  
   cout << ")." << endl;  
  
   cout << "Vector v2 is a copy of v1 with the value 7 removed:\n ( " ;  
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )  
      cout << *Iter2 << " ";  
   cout << ")." << endl;  
}  

输出:

The original vector v1 is:     ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 ).
Vector v1 is left unchanged as ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 ).
Vector v2 is a copy of v1 with the value 7 removed:
 ( 4 0 5 1 6 9 3 8 2 0 ).

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

代码精进之路 -〔范学雷〕

Swift核心技术与实战 -〔张杰〕

深入浅出云计算 -〔何恺铎〕

系统性能调优必知必会 -〔陶辉〕

微信小程序全栈开发实战 -〔李艺〕

MySQL 必知必会 -〔朱晓峰〕

Python实战 · 从0到1搭建直播视频平台 -〔Barry〕

B端体验设计入门课 -〔林远宏(汤圆)〕

AI 应用实战课 -〔黄佳〕

好记忆不如烂笔头。留下您的足迹吧 :)