std::views::drop în C++

Creează o vedere care sare peste primele n elemente ale unui range.

Sintaxă
auto v = range | std::views::drop(n);

Ce face std::views::drop

std::views::drop(n) începe parcurgerea de la al n + 1-lea element. Dacă range-ul are cel mult n elemente, rezultatul este gol.

Împreună cu take poți lua o „pagină” din date: drop(20) | take(10) înseamnă elementele 21-30.

Parametri

Parametru Descriere
range Sursa.
n Câte elemente se sar.

Ce returnează

Un view fără primele n elemente.

Exemple

Exemplul 1: Fără antetul unui fișier CSV

#include <print>
#include <ranges>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> linii{"nume,oras", "Ana,Iași", "Dan,Cluj", "Ioana,Brașov"};

    for (const auto& linie : linii | std::views::drop(1)) {
        std::println("{}", linie);
    }
}

Rezultat

Ana,Iași
Dan,Cluj
Ioana,Brașov

Exemplul 2: Paginare: pagina 2, câte 3 pe pagină

#include <print>
#include <ranges>

int main() {
    int pe_pagina = 3;
    int pagina = 2;

    auto produse = std::views::iota(1, 11);
    auto pagina_curenta = produse | std::views::drop((pagina - 1) * pe_pagina) | std::views::take(pe_pagina);
    std::println("Pagina {}: {}", pagina, pagina_curenta);
}

Rezultat

Pagina 2: [4, 5, 6]

Greșeli frecvente

  • Dai un n negativ: este comportament nedefinit.

Comenzi înrudite

  • std::views::take: Creează o vedere cu primele n elemente ale unui range (sau toate, dacă sunt mai puține).
  • std::views::take_while: Creează o vedere cu elementele de la început, cât timp îndeplinesc o condiție; se oprește la primul care nu o îndeplinește.
  • std::views::iota: Generează numerele consecutive dintr-un interval (sau la infinit) fără să le stocheze.