Ce face std::fill
std::fill scrie valoarea în fiecare poziție din [first, last). std::fill_n scrie valoarea în n poziții consecutive începând de la first și returnează iteratorul de după ultima.
Sunt utile pentru resetarea unui tablou sau pentru inițializarea unei porțiuni dintr-un vector deja creat.
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Intervalul de completat (pentru fill). |
n |
Numărul de elemente (pentru fill_n). |
valoare |
Valoarea scrisă. |
Ce returnează
fill: nimic. fill_n: iterator după ultimul element scris.
Exemple
Exemplul 1: Resetarea unei table de joc
#include <algorithm>
#include <array>
#include <print>
#include <string_view>
int main() {
std::array<char, 9> tabla{'X', 'O', 'X', ' ', 'O', ' ', ' ', 'X', ' '};
std::fill(tabla.begin(), tabla.end(), '.');
std::println("{}", std::string_view(tabla.data(), tabla.size()));
}
Rezultat
.........
Exemplul 2: Primele locuri ocupate
#include <algorithm>
#include <print>
#include <vector>
int main() {
std::vector<int> locuri(8, 0);
std::fill_n(locuri.begin(), 3, 1);
std::ranges::fill(locuri.begin() + 6, locuri.end(), 2);
std::println("{}", locuri);
}
Rezultat
[1, 1, 1, 0, 0, 0, 2, 2]
Greșeli frecvente
- Apelezi
fill_n(v.begin(), 10, x)pe un vector cu mai puțin de 10 elemente. Funcția nu verifică dimensiunea. - Folosești
memsetpentru a pune valoarea 1 într-un tablou deint:memsetlucrează pe octeți și rezultatul este 16843009.std::filllucrează pe elemente.
Comenzi înrudite
std::generate: Completează un interval cu valorile returnate de apeluri succesive ale unei funcții.std::iota: Completează un interval cu valori consecutive: valoare, valoare + 1, valoare + 2…std::copy: Copiază elementele unui interval (copy) sau primele n elemente (copy_n) la o destinație.