std::vector::assign în C++

std::vector C++98

Înlocuiește tot conținutul vectorului cu n copii ale unei valori, cu un interval sau cu o listă.

Sintaxă
void assign(size_type n, const T& valoare);
void assign(InputIt prim, InputIt ultim);
void assign(std::initializer_list<T> lista);   // C++11

Ce face std::vector::assign

assign șterge elementele vechi și pune în locul lor elemente noi. Este util când vrei să reumpli un vector existent, de exemplu cu valori din alt container de alt tip, unde simpla atribuire = nu merge.

Toți iteratorii și referințele vechi devin invalide.

Parametri

Parametru Descriere
n, valoare Noul conținut: n elemente egale cu valoare.
prim, ultim Un interval din orice container (sau tablou).
lista O listă între acolade.

Ce returnează

Nimic (void).

Exemple

Exemplul 1: Trei feluri de a reumple vectorul

#include <list>
#include <print>
#include <vector>

int main() {
    std::vector<int> v{1, 2, 3};
    v.assign(4, 7);
    std::println("{}", v);

    std::list<int> lista{10, 20, 30};
    v.assign(lista.begin(), lista.end());    // din alt tip de container
    std::println("{}", v);

    v.assign({5, 6});
    std::println("{}", v);
}

Rezultat

[7, 7, 7, 7]
[10, 20, 30]
[5, 6]

Greșeli frecvente

  • Folosești assign cu iteratori din același vector (v.assign(v.begin() + 1, v.end())). Nu este permis; copiază întâi intervalul sau folosește erase.

Comenzi înrudite

  • std::vector::resize: Schimbă numărul de elemente: adaugă elemente noi la final sau le șterge pe cele în plus.
  • std::vector::insert: Inserează unul sau mai multe elemente înaintea unei poziții din vector; emplace construiește elementul pe loc.
  • std::vector::clear: Șterge toate elementele vectorului; dimensiunea devine 0, dar memoria rezervată rămâne.