溫馨提示×

copy_if在C++中的用法是什么

c++
小樊
81
2024-09-25 01:20:16
欄目: 編程語言

std::copy_if 是 C++ 標(biāo)準(zhǔn)庫 <algorithm> 中的一個算法,它用于從一個輸入范圍復(fù)制滿足特定條件的元素到另一個輸出范圍。

函數(shù)原型如下:

template< class InputIt, class OutputIt, class UnaryPredicate >
OutputIt copy_if( InputIt first, InputIt last, OutputIt d_first, UnaryPredicate p );

參數(shù)說明:

  • firstlast 定義了輸入范圍,即你想要從中復(fù)制元素的范圍。
  • d_first 是輸出范圍的開始,即你想要將復(fù)制的元素放置的位置。
  • p 是一個一元謂詞,它定義了滿足什么條件的元素應(yīng)該被復(fù)制。

std::copy_if 的工作方式是這樣的:對于輸入范圍內(nèi)的每個元素,如果 p 返回 true,則該元素被復(fù)制到輸出范圍。否則,該元素被忽略。

下面是一個簡單的例子,它使用 std::copy_if 來復(fù)制一個 std::vector 中所有的偶數(shù):

#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;

    // 預(yù)留足夠的空間
    dest.reserve(src.size());

    // 使用 std::copy_if 復(fù)制所有的偶數(shù)
    std::copy_if(src.begin(), src.end(), std::back_inserter(dest), [](int x) { return x % 2 == 0; });

    // 輸出結(jié)果
    for (int x : dest) {
        std::cout<< x << ' ';
    }

    return 0;
}

注意,在這個例子中,我們使用了 std::back_inserter 來作為輸出迭代器,這樣元素就會被添加到 dest 的末尾。如果你想要將元素添加到 dest 的開頭,你可以使用 std::front_inserter

0