std::copy_if
是 C++ 標準庫 <algorithm>
中的一個算法,它用于從一個輸入范圍復制滿足特定條件的元素到另一個輸出范圍。
函數原型如下:
template< class InputIt, class OutputIt, class UnaryPredicate >
OutputIt copy_if( InputIt first, InputIt last, OutputIt d_first, UnaryPredicate p );
參數說明:
first
和 last
定義了輸入范圍,即你想要從中復制元素的范圍。d_first
是輸出范圍的開始,即你想要將復制的元素放置的位置。p
是一個一元謂詞,它定義了滿足什么條件的元素應該被復制。std::copy_if
的工作方式是這樣的:對于輸入范圍內的每個元素,如果 p
返回 true
,則該元素被復制到輸出范圍。否則,該元素被忽略。
下面是一個簡單的例子,它使用 std::copy_if
來復制一個 std::vector
中所有的偶數:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> src = {1, 2, 3, 4, 5, 6, 7, 8, 9};
std::vector<int> dest;
// 預留足夠的空間
dest.reserve(src.size());
// 使用 std::copy_if 復制所有的偶數
std::copy_if(src.begin(), src.end(), std::back_inserter(dest), [](int x) { return x % 2 == 0; });
// 輸出結果
for (int x : dest) {
std::cout<< x << ' ';
}
return 0;
}
注意,在這個例子中,我們使用了 std::back_inserter
來作為輸出迭代器,這樣元素就會被添加到 dest
的末尾。如果你想要將元素添加到 dest
的開頭,你可以使用 std::front_inserter
。