Ce face std::swap_ranges
std::swap_ranges face swap între first1[i] și first2[i] pentru fiecare poziție din primul interval. Al doilea interval trebuie să aibă cel puțin la fel de multe elemente.
Este util pentru a schimba bucăți din containere diferite sau două jumătăți ale aceluiași container. Pentru a schimba două containere întregi, std::swap(a, b) sau a.swap(b) este mai rapid.
Parametri
| Parametru | Descriere |
|---|---|
first1, last1 |
Primul interval. |
first2 |
Începutul celui de-al doilea interval. |
Ce returnează
Iterator după ultimul element schimbat din al doilea interval.
Exemple
Exemplul 1: Schimbarea primelor două echipe
#include <algorithm>
#include <print>
#include <string>
#include <vector>
int main() {
std::vector<std::string> echipa_a{"Ana", "Bogdan", "Cristi"};
std::vector<std::string> echipa_b{"Dana", "Emil", "Flavia"};
std::swap_ranges(echipa_a.begin(), echipa_a.begin() + 2, echipa_b.begin());
std::println("A: {}", echipa_a);
std::println("B: {}", echipa_b);
}
Rezultat
A: ["Dana", "Emil", "Cristi"]
B: ["Ana", "Bogdan", "Flavia"]
Exemplul 2: Jumătățile unui vector
#include <algorithm>
#include <print>
#include <vector>
int main() {
std::vector<int> v{1, 2, 3, 10, 20, 30};
auto mijloc = v.begin() + 3;
std::swap_ranges(v.begin(), mijloc, mijloc);
std::println("{}", v);
}
Rezultat
[10, 20, 30, 1, 2, 3]
Greșeli frecvente
- Al doilea interval este mai scurt decât primul: funcția scrie în afara lui (comportament nedefinit).
Comenzi înrudite
std::rotate: Rotește elementele astfel încât middle devine primul element, iar cele dinaintea lui trec la final.std::move: Mută elementele unui interval la o destinație, fără să le copieze (versiunea din <algorithm>).std::reverse: Inversează pe loc ordinea elementelor dintr-un interval.