std::to_array în C++

Creează un std::array dintr-un tablou C sau dintr-o listă, cu dimensiunea dedusă automat.

Sintaxă
template<class T, std::size_t N>
constexpr std::array<std::remove_cv_t<T>, N> to_array(T (&tablou)[N]);

Ce face std::to_array

Cu std::array trebuie de obicei să scrii și tipul, și numărul de elemente. std::to_array le deduce singură: auto a = std::to_array({1, 2, 3}); dă un std::array<int, 3>. Poți alege tipul elementelor și lăsa doar dimensiunea dedusă: std::to_array<long>({1, 2}).

Este utilă și pentru a transforma un tablou C existent sau un text literal într-un std::array (pentru text, rezultatul include și caracterul de final '\0').

Parametri

Parametru Descriere
tablou Un tablou C sau o listă între acolade.

Ce returnează

Un std::array cu copii ale elementelor.

Exemple

Exemplul 1: Dimensiune dedusă automat

#include <array>
#include <print>

int main() {
    auto prime = std::to_array({2, 3, 5, 7, 11});
    std::println("{} numere: {}", prime.size(), prime);

    auto mari = std::to_array<long long>({1, 2, 3});
    std::println("sizeof(element) = {}", sizeof(mari[0]));

    int vechi[] = {10, 20, 30};
    auto nou = std::to_array(vechi);
    std::println("{}", nou);

    auto litere = std::to_array("Iași");   // include și '\0'
    std::println("Text de {} octeți (cu '\\0')", litere.size());
}

Rezultat

5 numere: [2, 3, 5, 7, 11]
sizeof(element) = 8
[10, 20, 30]
Text de 6 octeți (cu '\0')

Greșeli frecvente

  • Uiți că un text literal se termină cu '\0': std::to_array("abc").size() este 4, nu 3. Iar literele cu diacritice ocupă câte 2 octeți în UTF-8.

Comenzi înrudite

  • std::array: Tablou cu dimensiune fixă, cunoscută la compilare, cu interfața unui container (size, at, begin, end).
  • std::span: O „fereastră” spre elemente consecutive din memorie (vector, array, tablou C), fără copiere și fără să le dețină.