C++ 算法 remove_copy() 函數用於從[first, last) 範圍內複製所有不等於val 的元素以提供結果,而不會幹擾其餘元素的順序。
這個函數不能改變容器的大小。
- 它返回一個迭代器到範圍的新末端。
- 刪除是穩定的。這意味著,未被刪除的元素的相對順序保持不變。
- 此函數使用 operator== 將元素與給定的 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) 中刪除的值。
返回值
指向複製範圍的新結束位置 (last) 的前向迭代器,其中包括 [first, last) 中的所有元素,除了那些比較等於 val 的元素。
複雜度
複雜度在[first, last)範圍內是線性的:比較每個元素,對沒有被移除的元素進行賦值操作。
數據競爭
訪問範圍 [first, last) 中的對象。
結果和返回值之間範圍內的對象發生了變化。
異常安全
如果元素比較、元素賦值或迭代器上的操作中的任何一個拋出異常,則此函數將拋出異常。
注意:無效的參數可能會導致未定義的行為。
例子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,
例子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
例子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
示例 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 ).
相關用法
- C++ Algorithm remove_copy_if()用法及代碼示例
- C++ Algorithm remove_if()用法及代碼示例
- C++ Algorithm remove()用法及代碼示例
- C++ Algorithm replace()用法及代碼示例
- C++ Algorithm reverse_copy()用法及代碼示例
- C++ Algorithm replace_copy()用法及代碼示例
- C++ Algorithm replace_copy_if()用法及代碼示例
- C++ Algorithm reverse()用法及代碼示例
- C++ Algorithm replace_if()用法及代碼示例
- C++ Algorithm random_shuffle()用法及代碼示例
- C++ Algorithm rotate()用法及代碼示例
- C++ Algorithm rotate_copy()用法及代碼示例
- C++ Algorithm max_element()用法及代碼示例
- C++ Algorithm set_union()用法及代碼示例
- C++ Algorithm next_permutation()用法及代碼示例
- C++ Algorithm upper_bound()用法及代碼示例
- C++ Algorithm minmax()用法及代碼示例
- C++ Algorithm pop_heap()用法及代碼示例
- C++ Algorithm set_intersection()用法及代碼示例
- C++ Algorithm lower_bound()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ Algorithm remove_copy()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。