Condividi tramite


Funzione parallel_transform

Applica uno specifico oggetto funzione ad ogni elemento in un intervallo di origine, o ad una coppia di elementi da due intervalli di origine e copia i valori restituiti dell'oggetto funzione in un intervallo di destinazione, in parallelo. Questa funzione è semanticamente equivalente a std::transform.

template <
   typename _Input_iterator1,
   typename _Output_iterator,
   typename _Unary_operator
>
_Output_iterator parallel_transform(
   _Input_iterator1_First1,
   _Input_iterator1_Last1,
   _Output_iterator_Result,
   const _Unary_operator& _Unary_op,
   const auto_partitioner& _Part = auto_partitioner()
);

template <
   typename _Input_iterator1,
   typename _Output_iterator,
   typename _Unary_operator
>
_Output_iterator parallel_transform(
   _Input_iterator1_First1,
   _Input_iterator1_Last1,
   _Output_iterator_Result,
   const _Unary_operator& _Unary_op,
   const static_partitioner& _Part
);

template <
   typename _Input_iterator1,
   typename _Output_iterator,
   typename _Unary_operator
>
_Output_iterator parallel_transform(
   _Input_iterator1_First1,
   _Input_iterator1_Last1,
   _Output_iterator_Result,
   const _Unary_operator& _Unary_op,
   const simple_partitioner& _Part
);

template <
   typename _Input_iterator1,
   typename _Output_iterator,
   typename _Unary_operator
>
_Output_iterator parallel_transform(
   _Input_iterator1_First1,
   _Input_iterator1_Last1,
   _Output_iterator_Result,
   const _Unary_operator& _Unary_op,
   affinity_partitioner& _Part
);

template <
   typename _Input_iterator1,
   typename _Input_iterator2,
   typename _Output_iterator,
   typename _Binary_operator,
   typename _Partitioner
>
_Output_iterator parallel_transform(
   _Input_iterator1_First1,
   _Input_iterator1_Last1,
   _Input_iterator2_First2,
   _Output_iterator_Result,
   const _Binary_operator& _Binary_op,
   _Partitioner&& _Part
);

template <
   typename _Input_iterator1,
   typename _Input_iterator2,
   typename _Output_iterator,
   typename _Binary_operator
>
_Output_iterator parallel_transform(
   _Input_iterator1_First1,
   _Input_iterator1_Last1,
   _Input_iterator2_First2,
   _Output_iterator_Result,
   const _Binary_operator& _Binary_op
);

Parametri

  • _Input_iterator1
    Tipo del primo o del solo iteratore di input.

  • _Output_iterator
    Tipo di iteratore di output.

  • _Unary_operator
    Tipo del functor unario che deve essere eseguito su ogni elemento nell'intervallo di input.

  • _Input_iterator2
    Tipo del secondo iteratore di input.

  • _Binary_operator
    Tipo del functor binario che deve essere eseguito a coppie sugli elementi di due intervalli di origine.

  • _Partitioner

  • _First1
    Iteratore di input che punta alla posizione del primo elemento nel primo o nel solo intervallo di origine da utilizzare.

  • _Last1
    Iteratore di input che punta alla prima posizione dopo l'elemento finale nel primo o nel solo intervallo di origine da utilizzare.

  • _Result
    Iteratore di output che punta alla posizione del primo elemento nell'intervallo di destinazione.

  • _Unary_op
    Oggetto funzione unario definito dall'utente che viene applicato a ogni elemento nell'intervallo di origine.

  • _Part
    Riferimento all'oggetto partitioner. L'argomento può essere constauto_partitioner&, conststatic_partitioner&, constsimple_partitioner& o affinity_partitioner& Se viene utilizzato un oggetto affinity_partitioner, il riferimento deve essere un riferimento non const l-value, così l'algoritmo può archiviare lo stato per i cicli futuri per riutilizzarlo.

  • _First2
    Iteratore di input che punta alla posizione del primo elemento nel secondo intervallo di origine da utilizzare.

  • _Binary_op
    Oggetto funzione binario definito dall'utente che si applica a coppie, in ordine progressivo, a due intervalli di origine.

Valore restituito

Un iteratore di output che punta alla prima posizione dopo l'elemento finale nell'intervallo di destinazione che riceve gli elementi di output trasformati dall'oggetto funzione.

Note

auto_partitioner verrà utilizzato per gli overload senza un argomento partitioner esplicito.

Per gli iteratori che non supportano l'accesso casuale, solo auto_partitioner è supportato.

Gli overload che accettano l'argomento _Unary_op trasformano l'intervallo di input nell'intervallo di output applicando il functor unario ad ogni elemento nell'intervallo di input. _Unary_op deve supportare l'operatore di chiamata a funzione con la firma operator()(T) dove T è il tipo di valore dell'intervallo che viene scorso in un ciclo.

Gli overload che accettano l'argomento _Binary_op trasformano due intervalli di input nell'intervallo di output applicando il functor binario ad un elemento dal primo intervallo di input e ad un elemento dal secondo intervallo di input. _Binary_op deve supportare l'operatore di chiamata a funzione con la firma operator()(T, U) dove T, U sono i tipi dei valori dei due iteratori di input.

Per ulteriori informazioni, vedere Algoritmi paralleli.

Requisiti

Header: ppl.h

Spazio dei nomi: concorrenza

Vedere anche

Riferimenti

Spazio dei nomi concurrency