std::copy_if
是 C++ 標準庫中的一個算法,它用于從一個輸入范圍復制滿足特定條件的元素到另一個輸出范圍。其基本語法如下:
template< class InputIt, class OutputIt, class UnaryPredicate >
OutputIt copy_if( InputIt first, InputIt last, OutputIt d_first, UnaryPredicate p );
這里,InputIt
和 OutputIt
是迭代器類型,表示輸入和輸出范圍;UnaryPredicate
是一個一元謂詞,即接受單個參數的函數或函數對象,用于定義復制條件。
下面是一個使用 std::copy_if
的示例,將一個 std::vector
中所有大于 5 的元素復制到另一個 std::vector
中:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main() {
std::vector<int> src = {1, 6, 3, 8, 2, 10};
std::vector<int> dest;
// 預分配足夠的空間以提高性能
dest.reserve(src.size());
// 使用 std::copy_if 復制大于 5 的元素
std::copy_if(src.begin(), src.end(), std::back_inserter(dest), [](int x) { return x > 5; });
// 輸出結果
for (int num : dest) {
std::cout << num << ' ';
}
return 0;
}
在這個示例中,我們使用了 lambda 表達式 [](int x) { return x > 5; }
作為謂詞,它定義了復制條件為“元素值大于 5”。std::back_inserter(dest)
用于將復制的元素插入到 dest
的末尾。注意,我們還使用了 dest.reserve()
來預分配足夠的空間以提高性能,因為 std::back_inserter
會導致多次內存分配。