std:: array
|
Défini dans l'en-tête
<array>
|
||
|
template
<
class
T,
|
(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 . |
|
Cette section est incomplète
Raison : Compléter les descriptions des paramètres de template. |
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
|
|
||||||
const_iterator
|
|
||||||
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) |
|
(C++11)
|
accède à un élément d'un
array
(modèle de fonction) |
|
(C++11)
|
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
|
(C++11)
|
obtient la taille d'un
array
(spécialisation de modèle de classe) |
|
(C++11)
|
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
|
(C++26)
|
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) |