C++算法 remove_copy()函数用于复制[first,last)参数内不等于val的所有元素,以提供结果而不会干扰其余元素的顺序。
此函数无法更改集合的大小。
template <class InputIterator, class OutputIterator, class T> OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, const T& val);
first:前向迭代器,指向要从中删除元素的参数内第一个元素的位置。
last:正向迭代器,在要删除元素的参数内,将位置指向最后一个元素之后的位置。
result:一个输出迭代器,它指向要删除元素的参数的初始位置。
val :要从[first,last)参数中删除的值。
指向复制参数的新结束位置(最后)的前向迭代器,其中包括[first,last)中的所有元素,但比较等于val的元素除外。
让我们看一个简单的示例来演示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,
让我们看另一个简单的例子:
#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
让我们看另一个简单的示例,以删除给定文本中的所有空格:
#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
让我们看另一个简单的例子:
#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 ).
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)