std::replace în C++

Înlocuiește pe loc toate elementele egale cu o valoare (replace) sau care îndeplinesc o condiție (replace_if).

Sintaxă
void replace(ForwardIt first, ForwardIt last, const T& vechi, const T& nou);
void replace_if(ForwardIt first, ForwardIt last, UnaryPred conditie, const T& nou);

Ce face std::replace

std::replace parcurge intervalul și înlocuiește fiecare apariție a lui vechi cu nou. std::replace_if înlocuiește elementele pentru care funcția returnează true.

Pe std::string, std::replace lucrează cu caractere individuale. Pentru a înlocui un cuvânt întreg ai nevoie de string::find și string::replace.

Parametri

Parametru Descriere
first, last Intervalul.
vechi Valoarea înlocuită (pentru replace).
conditie Funcția de test (pentru replace_if).
nou Valoarea nouă.

Ce returnează

Nimic.

Exemple

Exemplul 1: Caractere într-un text

#include <algorithm>
#include <print>
#include <string>

int main() {
    std::string data = "2026-10-19";
    std::replace(data.begin(), data.end(), '-', '.');
    std::println("{}", data);
}

Rezultat

2026.10.19

Exemplul 2: Plafonarea valorilor negative

#include <algorithm>
#include <print>
#include <vector>

int main() {
    std::vector<int> sold{120, -30, 45, -5, 0};

    std::replace_if(sold.begin(), sold.end(), [](int s) { return s < 0; }, 0);
    std::println("{}", sold);

    std::ranges::replace(sold, 0, -1);
    std::println("{}", sold);
}

Rezultat

[120, 0, 45, 0, 0]
[120, -1, 45, -1, -1]

Greșeli frecvente

  • Încerci std::replace(s.begin(), s.end(), "vechi", "nou") pe un text: nu compilează, pentru că elementele sunt caractere, nu cuvinte.

Comenzi înrudite

  • std::remove: Mută la final elementele egale cu o valoare și returnează noul sfârșit; ștergerea reală se face cu erase.
  • 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).