Namespaces
Variants

std:: array

From cppreference.net
Défini dans l'en-tête <array>
template <

class T,
std:: size_t N

> struct array ;
(depuis C++11)

std::array est un conteneur qui encapsule des tableaux de taille fixe.

Ce conteneur est un type agrégé ayant les mêmes sémantiques qu'une structure contenant un tableau de style C T [ N ] comme seul membre de données non statique. Contrairement à un tableau de style C, il ne se dégrade pas en T * automatiquement. En tant que type agrégé, il peut être initialisé avec une initialisation agrégée avec au plus N initialiseurs convertibles en T : std :: array < int , 3 > a = { 1 , 2 , 3 } ; .

La structure combine les performances et l'accessibilité d'un tableau de style C avec les avantages d'un conteneur standard, comme connaître sa propre taille, prendre en charge l'assignation, les itérateurs à accès aléatoire, etc.

std::array satisfait aux exigences de Container et ReversibleContainer sauf qu'un tableau construit par défaut n'est pas vide et que la complexité d'échange est linéaire, satisfait aux exigences de ContiguousContainer , (depuis C++17) et satisfait partiellement aux exigences de SequenceContainer .

Il existe un cas particulier pour un tableau de longueur nulle ( N == 0 ). Dans ce cas, array. begin ( ) == array. end ( ) , ce qui correspond à une valeur unique. L'effet de l'appel à front ( ) ou back ( ) sur un tableau de taille zéro est indéfini.

Un tableau peut également être utilisé comme un tuple de N éléments du même type.

Table des matières

Invalidation des itérateurs

En règle générale, les itérateurs vers un tableau ne sont jamais invalidés pendant la durée de vie du tableau. Il convient toutefois de noter que lors d'un swap , l'itérateur continuera de pointer vers le même élément du tableau, et changera donc de valeur.

Paramètres du modèle

T - type d'élément Doit être MoveConstructible et MoveAssignable .
N - le nombre d'éléments dans le tableau ou 0 .

Types membres

Type de membre Définition
value_type T
size_type std::size_t
difference_type std::ptrdiff_t
reference value_type &
const_reference const value_type &
pointer value_type *
const_pointer const value_type *
iterator

LegacyRandomAccessIterator et LegacyContiguousIterator vers value_type

(jusqu'en C++17)

LegacyRandomAccessIterator et LegacyContiguousIterator qui est un LiteralType vers value_type

(depuis C++17)
(jusqu'en C++20)

LegacyRandomAccessIterator , contiguous_iterator , et ConstexprIterator vers value_type

(depuis C++20)
const_iterator

LegacyRandomAccessIterator et LegacyContiguousIterator vers const value_type

(jusqu'en C++17)

LegacyRandomAccessIterator et LegacyContiguousIterator qui est un LiteralType vers const value_type

(depuis C++17)
(jusqu'en C++20)

LegacyRandomAccessIterator , contiguous_iterator , et ConstexprIterator vers const value_type

(depuis C++20)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

Fonctions membres

Fonctions membres implicitement définies
(constructeur)
(implicitement déclaré)
initialise le tableau suivant les règles de l'initialisation agrégée (notez que l'initialisation par défaut peut donner des valeurs indéterminées pour les types non-classes T )
(fonction membre publique)
(destructeur)
(implicitement déclaré)
détruit chaque élément du tableau
(fonction membre publique)
operator=
(implicitement déclaré)
remplace chaque élément du tableau par l'élément correspondant d'un autre tableau
(fonction membre publique)
Accès aux éléments
accède à l'élément spécifié avec vérification des limites
(fonction membre publique)
accède à l'élément spécifié
(fonction membre publique)
accède au premier élément
(fonction membre publique)
accède au dernier élément
(fonction membre publique)
accès direct au stockage contigu sous-jacent
(fonction membre publique)
Itérateurs
retourne un itérateur vers le début
(fonction membre publique)
retourne un itérateur vers la fin
(fonction membre publique)
retourne un itérateur inverse vers le début
(fonction membre publique)
retourne un itérateur inverse vers la fin
(fonction membre publique)
Capacité
vérifie si le conteneur est vide
(fonction membre publique)
retourne le nombre d'éléments
(fonction membre publique)
retourne le nombre maximum possible d'éléments
(fonction membre publique)
Opérations
remplit le conteneur avec la valeur spécifiée
(fonction membre publique)
échange le contenu
(fonction membre publique)

Fonctions non membres

(C++11) (C++11) (supprimé en C++20) (C++11) (supprimé en C++20) (C++11) (supprimé en C++20) (C++11) (supprimé en C++20) (C++11) (supprimé en C++20) (C++20)
compare lexicographiquement les valeurs de deux array
(modèle de fonction)
accède à un élément d'un array
(modèle de fonction)
spécialise l'algorithme std::swap
(modèle de fonction)
(C++20)
crée un objet std::array à partir d'un tableau natif
(modèle de fonction)

Classes d'assistance

obtient la taille d'un array
(spécialisation de modèle de classe)
obtient le type des éléments d'un array
(spécialisation de modèle de classe)

Guides de déduction

(depuis C++17)

Exemple

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    // La construction utilise l'initialisation par agrégat
    std::array<int, 3> a1{{1, 2, 3}}; // Doubles accolades requises en C++11 avant
                                      // la révision CWG 1270 (non nécessaires en C++11
                                      // après la révision et en C++14 et au-delà)
    std::array<int, 3> a2 = {1, 2, 3}; // Doubles accolades jamais requises après =
    // Les opérations sur les conteneurs sont supportées
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    // La boucle for à portée est supportée
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
    // Guide de déduction pour la création de tableau (depuis C++17)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
    // Le comportement des éléments non spécifiés est le même qu'avec les tableaux natifs
    [[maybe_unused]] std::array<int, 2> a5; // Pas d'initialisation par liste, a5[0] et a5[1]
                                            // sont initialisés par défaut
    [[maybe_unused]] std::array<int, 2> a6{}; // Initialisation par liste, les deux éléments sont
                                              // initialisés par valeur, a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // Initialisation par liste, l'élément non spécifié est
                                               // initialisé par valeur, a7[0] = 1, a7[1] = 0
}

Sortie :

3 2 1
E Ǝ

Voir aussi

tableau contigu redimensionnable, capacité fixe, en place
(modèle de classe)
tableau contigu redimensionnable
(modèle de classe)
file double face
(modèle de classe)
(library fundamentals TS v2)
crée un objet std::array dont la taille et optionnellement le type d'élément sont déduits des arguments
(modèle de fonction)