Ce face std::copy
std::copy copiază [first, last) la poziția d_first, în ordine. std::copy_n copiază exact n elemente începând de la first.
Destinația trebuie să aibă deja loc pentru elemente sau să fie un iterator de inserare, precum std::back_inserter(v). Poți copia și direct pe ecran cu std::ostream_iterator.
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Sursa (pentru copy). |
n |
Câte elemente se copiază (pentru copy_n). |
d_first |
Începutul destinației. |
Ce returnează
Iterator după ultimul element scris în destinație.
Exemple
Exemplul 1: Copiere în alt vector
#include <algorithm>
#include <iterator>
#include <print>
#include <vector>
int main() {
std::vector<int> original{4, 8, 15, 16, 23, 42};
std::vector<int> copie(original.size());
std::copy(original.begin(), original.end(), copie.begin());
std::vector<int> primele3;
std::copy_n(original.begin(), 3, std::back_inserter(primele3));
std::println("Copie: {}", copie);
std::println("Primele 3: {}", primele3);
}
Rezultat
Copie: [4, 8, 15, 16, 23, 42]
Primele 3: [4, 8, 15]
Exemplul 2: Afișare cu ostream_iterator
Al doilea argument al lui ostream_iterator este separatorul pus după fiecare element.
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
int main() {
std::vector<std::string> zile{"luni", "marți", "miercuri"};
std::copy(zile.begin(), zile.end(), std::ostream_iterator<std::string>(std::cout, " | "));
std::cout << '\n';
}
Rezultat
luni | marți | miercuri |
Greșeli frecvente
- Destinația este un vector gol și folosești
copie.begin(). Algoritmul nu mărește vectorul; scrie în afara lui. Făresizeînainte sau foloseșteback_inserter. - Copiezi într-un interval care se suprapune cu sursa spre dreapta. Pentru asta există
std::copy_backward.
Comenzi înrudite
std::copy_if: Copiază doar elementele care îndeplinesc o condiție, păstrând ordinea lor.std::move: Mută elementele unui interval la o destinație, fără să le copieze (versiunea din <algorithm>).std::transform: Aplică o funcție fiecărui element și scrie rezultatele în alt interval (sau în același).std::fill: Atribuie aceeași valoare tuturor elementelor unui interval (fill) sau primelor n elemente (fill_n).