C++ 算法 replace_copy() 函數用於複製範圍 [first, last) 並將所有 old_value 替換為值 new_value 到其中。它使用operator= 進行複製並比較它使用operator== 的元素。
此函數檢查源範圍中的每個元素,如果在將結果複製到新的目標範圍時匹配指定的值,則替換它。
用法
template <class InputIterator, class OutputIterator, class T>
OutputIterator replace_copy (InputIterator first, InputIterator last,
OutputIterator result, const T& old_value, const T& new_value);
參數
first:一個輸入迭代器,指向元素被替換的範圍內的初始位置。
last:一個輸入迭代器,指向元素被替換的範圍內的最終位置。
result:一個輸出迭代器,指向存儲結果序列的範圍的第一個元素。
old_value:被替換元素的舊值。
new_value:分配給具有舊值的元素的新值。
返回值
replace_copy() 函數返回一個輸出迭代器,該迭代器指向指向結果序列中寫入的最後一個元素的位置。
複雜度
複雜性在 first 和 last 之間的距離上是線性的,並為每個元素執行比較和分配。
數據競爭
訪問範圍 [first1, last1) 中的對象。
結果和返回值範圍內的對象被修改。
異常安全
如果任何元素比較、元素賦值或迭代器上的操作引發異常,則此函數將引發異常。
請注意,無效參數會導致未定義的行為。
例子1
讓我們看一個簡單的例子來演示 replace_copy() 的使用:
#include <algorithm>
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main() {
vector<int> v = { 3,1,2,1,2 };
replace_copy(v.begin(), v.end(),
ostream_iterator<int>(cout, ","), 1, 10);
}
輸出:
3,10,2,10,2,
例子2
讓我們看另一個簡單的例子:
#include <iostream> // std::cout
#include <algorithm> // std::replace_copy
#include <vector> // std::vector
using namespace std;
int main () {
int myints[] = { 10, 20, 30, 15, 20, 10, 10, 20 };
vector<int> myvector (8);
replace_copy (myints, myints+8, myvector.begin(), 20, 99);
cout << "myvector contains:";
for (vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
cout << ' ' << *it;
cout << '\n';
return 0;
}
輸出:
myvector contains:10 99 30 15 99 10 10 99
例子3
讓我們看另一個簡單的例子:
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>
int main( ) {
using namespace std;
vector <int> v1;
list <int> L1 (15);
vector <int>::iterator Iter1;
list <int>::iterator L_Iter1;
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( ) );
int iii;
for ( iii = 0 ; iii <= 15 ; iii++ )
v1.push_back( 1 );
cout << "The original vector v1 is:\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Replace elements in one part of a vector with a value of 7
// with a value of 70 and copy into another part of the vector
replace_copy ( v1.begin( ), v1.begin( ) + 14,v1.end( ) -15, 7 , 70);
cout << "The vector v1 with a value 70 replacing that of 7 is:\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Replace elements in a vector with a value of 70
// with a value of 1 and copy into a list
replace_copy ( v1.begin( ), v1.begin( ) + 14,L1.begin( ), 7 , 1);
cout << "The list copy L1 of v1 with the value 0 replacing "
<< "that of 7 is:\n ( " ;
for ( L_Iter1 = L1.begin( ) ; L_Iter1 != L1.end( ) ; L_Iter1++ )
cout << *L_Iter1 << " ";
cout << ")." << endl;
return 0;
}
輸出:
The original vector v1 is: ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ). The vector v1 with a value 70 replacing that of 7 is: ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 1 4 70 70 70 0 5 70 1 6 9 3 70 8 2 1 ). The list copy L1 of v1 with the value 0 replacing that of 7 is: ( 4 1 1 1 0 5 1 1 6 9 3 1 8 2 0 ).
示例 4
讓我們看另一個簡單的例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Function to replace 'A' at v.begin() with Z and copy it
// to v.begin() position
void replace_copyDemo(vector<char>& v)
{
replace_copy(v.begin(), v.begin()+1, v.begin(), 'A', 'Z' );
}
// Function to print content of vector
void print(vector<char>& v)
{
int len = v.size();
for (int i = 0; i < len; i++)
cout << v[i] << " ";
cout << endl;
}
// Driver code
int main()
{
vector<char> v;
for (int i = 0; i <= 6; i++)
v.push_back('A' + i);
cout << "Before replace_copy " <<":";
print(v);
replace_copyDemo(v);
cout << "After replace_copy " << ":";
print(v);
return 0;
}
輸出:
Before replace_copy:A B C D E F G After replace_copy:Z B C D E F G
在上麵的例子中,函數 replace_copy() 用於將 v.begin() 處的 'A' 替換為 Z 並將其複製到 v.begin() 位置。
相關用法
- C++ Algorithm replace_copy_if()用法及代碼示例
- C++ Algorithm replace_if()用法及代碼示例
- C++ Algorithm replace()用法及代碼示例
- C++ Algorithm remove_if()用法及代碼示例
- C++ Algorithm remove()用法及代碼示例
- C++ Algorithm remove_copy_if()用法及代碼示例
- C++ Algorithm reverse_copy()用法及代碼示例
- C++ Algorithm remove_copy()用法及代碼示例
- C++ Algorithm reverse()用法及代碼示例
- 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 replace_copy()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。