Namespaces
Variants

std::copy_n

De fr.cppreference.net
 
 
Bibliothèque d'algorithmes
Algorithmes contraints et algorithmes sur plages (C++20)
Algorithmes contraints, par ex. ranges::copy, ranges::sort, ...
Opérations de séquence non modifiantes    
Opérations par lots
(C++17)
Opérations de recherche
Opérations de séquence modifiantes
Opérations de copie
(C++11)
(C++11)
Opérations d'échange
Opérations de transformation
Opérations de génération
Opérations de suppression
Opérations de changement d'ordre
(jusqu'à C++17)(C++11)
(C++20)(C++20)
Opérations d'échantillonnage
(C++17)

Opérations de tri et connexes
Opérations de partitionnement
(C++11)    

Opérations de tri
Opérations de recherche binaire
(sur plages partitionnées)
Opérations d'ensemble (sur plages triées)
Opérations de fusion (sur plages triées)
Opérations de tas
Opérations de minimum/maximum
(C++11)
(C++17)
Opérations de comparaison lexicographique
Opérations de permutation


 
Défini dans l'en-tête <algorithm>
template< class InputIt, class Size, class OutputIt >
OutputIt copy_n( InputIt first, Size count, OutputIt result );
(1) (depuis C++11)
(constexpr depuis C++20)
template< class ExecutionPolicy,
          class ForwardIt1, class Size, class ForwardIt2 >
ForwardIt2 copy_n( ExecutionPolicy&& policy,
                   ForwardIt1 first, Size count, ForwardIt2 result );
(2) (depuis C++17)
1) Copie exactement count valeurs de la plage commençant à first vers la plage commençant à result. Formellement, pour chaque entier i dans [0count), effectue *(result + i) = *(first + i).
Le chevauchement des plages est formellement permis, mais conduit à un ordre imprévisible des résultats.
2) Identique à (1), mais exécutée selon policy.
Cette surcharge participe à la résolution de surcharge uniquement si la valeur de l'expression suivante est true :

std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>

(jusqu'à C++20)

std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>>

(depuis C++20)

Paramètres

first - le début de la plage d'éléments à copier
count - nombre d'éléments à copier
result - le début de la plage de destination
policy - la politique d'exécution à utiliser
Exigences de type
-
InputIt doit satisfaire aux exigences de LegacyInputIterator.
-
OutputIt doit satisfaire aux exigences de LegacyOutputIterator.
-
ForwardIt1, ForwardIt2 doit satisfaire aux exigences de LegacyForwardIterator.

Valeur de retour

Itérateur dans la plage de destination, pointant après le dernier élément copié si count > 0 ou result sinon.

Complexité

Zéro affectation si count < 0; count affectations sinon.

Exceptions

La surcharge avec un paramètre template nommé ExecutionPolicy signale les erreurs comme suit :

  • Si l'exécution d'une fonction invoquée dans le cadre de l'algorithme lance une exception et que ExecutionPolicy fait partie des politiques standard, std::terminate est appelée. Pour toute autre ExecutionPolicy, le comportement est défini par l'implémentation.
  • Si l'algorithme échoue à allouer de la mémoire, std::bad_alloc est lancée.

Implémentation possible

template<class InputIt, class Size, class OutputIt>
constexpr //< since C++20
OutputIt copy_n(InputIt first, Size count, OutputIt result)
{
    if (count > 0)
    {
        *result = *first;
        ++result;
        for (Size i = 1; i != count; ++i, (void)++result)
            *result = *++first;
    }
    
    return result;
}

Exemple

#include <algorithm>
#include <iostream>
#include <iterator>
#include <numeric>
#include <string>
#include <vector>

int main()
{
    std::string in {"1234567890"};
    std::string out;
    
    std::copy_n(in.begin(), 4, std::back_inserter(out));
    std::cout << out << '\n';
    
    std::vector<int> v_in(128);
    std::iota(v_in.begin(), v_in.end(), 1);
    std::vector<int> v_out(v_in.size());
    
    std::copy_n(v_in.cbegin(), 100, v_out.begin());
    std::cout << std::accumulate(v_out.begin(), v_out.end(), 0) << '\n';
}

Sortie :

1234
5050

Voir aussi

copie une plage d'éléments vers un nouvel emplacement
(modèle de fonction & objet fonction d'algorithme)
copie un nombre d'éléments vers un nouvel emplacement
(objet fonction d'algorithme)