◐ Shell
clean mode source ↗

std::partition_copy - cppreference.com

Da cppreference.com.

Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate.

La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui.

Click here for the English version of this page

<metanoindex/>

<tbody> </tbody>

Elemento definito nell'header

<algorithm>

template< class InputIt, class OutputIt1, class OutputIt2, class UnaryPredicate > std::pair<OutputIt1, OutputIt2> partition_copy(InputIt first, InputIt last, OutputIt1 d_first_true, OutputIt2 d_first_false, UnaryPredicate p);

(dal C++11)

Copia gli elementi che soddisfano la p predicato dal [first, last) gamma all'inizio gamma a d_first_true, e copia gli elementi che non soddisfano p all'inizio gamma a d_first_false.

Original:

Copies the elements that satisfy the predicate p from the range [first, last) to the range beginning at d_first_true, and copies the elements that do not satisfy p to the range beginning at d_first_false.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Parametri

first, last -

la gamma di elementi da ordinare

Original:

the range of elements to sort

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

d_first_true -

l'inizio del campo di uscita per gli elementi che soddisfano p

Original:

the beginning of the output range for the elements that satisfy p

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

d_first_false -

l'inizio del campo di uscita per gli elementi che non soddisfano p

Original:

the beginning of the output range for the elements that do not satisfy p

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

p - unary predicate which returns ​true

se l'elemento deve essere posto in d_first_true

Original:

if the element should be placed in d_first_true

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

.

The signature of the predicate function should be equivalent to the following:

bool pred(const Type &a);

The signature does not need to have const &, but the function must not modify the objects passed to it.
The type Type must be such that an object of type InputIt can be dereferenced and then implicitly converted to Type. ​

Type requirements
-InputIt must meet the requirements of InputIterator.
-OutputIt1 must meet the requirements of OutputIterator.
-OutputIt2 must meet the requirements of OutputIterator.

Valore di ritorno

Un pair costruito dal iteratore alla fine del campo d_first_true e l'iteratore alla fine del campo d_first_false.

Original:

A pair constructed from the iterator to the end of the d_first_true range and the iterator to the end of the d_first_false range.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Complessità

Esattamente distance(first, last) applicazioni di p.

Original:

Exactly distance(first, last) applications of p.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Possibile implementazione

template<class InputIt, class OutputIt1,
         class OutputIt2, class UnaryPredicate>
std::pair<OutputIt1, OutputIt2>
    partition_copy(InputIt first, InputIt last,
                   OutputIt1 d_first_true, OutputIt2 d_first_false,
                   UnaryPredicate p)
{
    while (first != last) {
        if (p(*first)) {
            *d_first_true = *first;
            ++d_first_true;
        } else {
            *d_first_false = *first;
            ++d_first_false;
        }
        ++first;
    }
    return std::pair<OutputIt1, OutputIt2>(d_first_true, d_first_false);
}

Esempio

#include <iostream>
#include <algorithm>
#include <utility>

int main()
{
    int arr [10] = {1,2,3,4,5,6,7,8,9,10};
    int true_arr [5] = {0};
    int false_arr [5] = {0};

    std::partition_copy(std::begin(arr), std::end(arr), std::begin(true_arr),std::begin(false_arr),
                        [] (int i) {return i > 5;});

    std::cout << "true_arr: ";
    for (auto it = std::begin(true_arr); it != std::end(true_arr); ++it) {
        std::cout << *it << ' ';
    }
    std::cout << '\n'; 

    std::cout << "false_arr: ";
    for (auto it = std::begin(false_arr); it != std::end(false_arr); ++it) {
        std::cout << *it << ' ';
    }
    std::cout << '\n'; 

    return 0;

}

Output:

true_arr: 6 7 8 9 10
false_arr: 1 2 3 4 5

Vedi anche

divide una serie di elementi in due gruppi

Original:

divides a range of elements into two groups

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(funzione di modello) [modifica]

divide gli elementi in due gruppi, mantenendo l'ordine relativo

Original:

divides elements into two groups while preserving their relative order

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(funzione di modello) [modifica]