Fonction back de C++ <vector>
Dans diverses opérations de vector,backest une fonction très pratique, utilisée pourobtenir le dernier élément。
backest une fonction membre des classes conteneurs, utilisée pourrenvoyer le dernier élément du conteneur. Elle est équivalente àat(size()-1)ouoperator[](size()-1), mais avec une sémantique plus claire.
backil fournit un moyen intuitif d'accéder au dernier élément d'un conteneur, couramment utilisé dans l'implémentation de structures de données telles que les piles et les files.
Définitions de mots: backCela signifie « back », c'est-à-dire obtenir le dernier élément (le plus à l'arrière).
Syntaxe de base et paramètres
backC'est une fonction membre des classes conteneurs ; son appel est très simple et ne nécessite aucun paramètre.
Format de syntaxe
reference back(); const_reference back() const;
Description des paramètres
- Paramètre: Aucun paramètre
backn'accepte aucun paramètre.
Description de la fonction
- Valeur de retour: renvoie le dernier élément de la référencedu conteneur. Si le conteneur est un conteneur const, elle renvoie une référence const.
- Effet: renvoie le dernier élément du conteneur (indice
size()-1élément à). - Remarque: appeler
backAvant [utilisation], assurez-vous que le conteneur n'est pas vide ; sinon, le comportement est indéfini. Il est recommandé d'utiliser d'abordempty()ousize() > 0Vérifiez.
Exemple
Maîtrisons parfaitement [cela] à travers une série d'exemples.backUtilisation.
Exemple 1 : Utilisation de base - obtenir le dernier élément
Exemple
#include <vector>
int main() {
// 1. Créer un vecteur et ajouter quelques éléments
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "La taille du vecteur est : " << numbers.size() << std::endl;
// 2. Utilisez back() pour obtenir le dernier élément
std::cout << "Le dernier élément (back) : " << numbers.back() << std::endl;
std::cout << "En utilisant at(size()-1) : " << numbers.at(numbers.size() - 1) << std::endl;
std::cout << "En utilisant [size()-1] : " << numbers[numbers.size() - 1] << std::endl;
return 0;
}
Sortie attendue :
vector的大小是: 5 最后一个元素 (back): 50 使用 at(size()-1): 50 使用 [size()-1]: 50
Analyse du code :
numbers.back()renvoie le dernier élément50。- Il et
numbers.at(numbers.size()-1)etnumbers[numbers.size()-1]retourne la même valeur, mais avec une sémantique plus explicite.
Exemple 2 : Modifier la valeur du dernier élément
backElle retourne une référence, elle peut donc être utilisée pour modifier la valeur de l'élément.
Exemple
#include <vector>
#include <string>
int main() {
std::vector<std::string> tasks = {"Apprendre le C++", "Faire les devoirs", "Lire la documentation"};
std::cout << "Avant modification, la dernière tâche : " << tasks.back() << std::endl;
// Utiliser back() pour obtenir une référence et modifier l'élément
tasks.back() = "Terminer";
std::cout << "Après modification, la dernière tâche : " << tasks.back() << std::endl;
// Maintenant, le contenu de tasks est : apprendre C++, faire les devoirs, terminer le projet
return 0;
}
Sortie attendue :
Before modification, last task: read documentation. After modification, last task: complete project.
Analyse du code :
tasks.back() = "完成项目";La valeur du dernier élément est modifiée via la référence.back()renvoie une référence lvalue modifiable.
Exemple 3 : Utilisation sûre de back - vérifier si le conteneur est vide
Lors de l'utilisationbackAvant, vous devez d'abord vérifier si le conteneur est vide.
Exemple
#include <vector>
void printBack(const std::vector<int>& v) {
if(!v.empty()) {
std::cout << Le dernier élément est : << v.back() << std::endl;
}
else {
std::cout << Le conteneur est vide, impossible d'obtenir le dernier élément << std::endl;
}
}
int main() {
std::vector<int> numbers = {10, 20, 30};
// Cas normal
printBack(numbers);
// Cas de conteneur vide
std::vector<int> emptyVec;
printBack(emptyVec);
return 0;
}
Sortie attendue :
最后一个元素是: 30 容器为空,无法获取最后一个元素
Analyse du code :
!v.empty()vérifier si le conteneur n'est pas vide.- Lors de l'appel
backVérifier avant [utilisation] peut éviter un comportement indéfini.
Exemple 4 : implémenter une pile en utilisant back
backest souvent utilisé pour implémenter des structures de données de pile (conjointement avecpush_backetpop_back)。
Exemple
#include <vector>
class Stack {
private:
std::vector<int> data;
public:
// Empiler
void push(int value) {
data.push_back(value);
}
// Dépiler
void pop() {
if(!data.empty()) {
data.pop_back();
}
}
// Obtenir l'élément au sommet de la pile
int top() {
if(!data.empty()) {
return data.back();
}
return 0; // Indique que la pile est vide
}
// Vérifier si la pile est vide
bool empty() {
return data.empty();
}
// Obtenir la taille de la pile
size_t size() {
return data.size();
}
};
int main() {
Stack s;
// Opération push
s.push(10);
s.push(20);
s.push(30);
std::cout << Taille de la pile : << s.size() << std::endl;
std::cout << Élément au sommet (arrière) : << s.top() << std::endl;
// Opération pop
s.pop();
std::cout << Après dépilement, l'élément au sommet : << s.top() << std::endl;
s.pop();
std::cout << Après avoir dépilé à nouveau, l'élément au sommet : << s.top() << std::endl;
s.pop();
std::cout << Après avoir dépilé à nouveau, la pile est-elle vide : << (s.empty() ? Oui : Non) << std::endl;
return 0;
}
Sortie attendue :
栈的大小: 3 栈顶元素 (back): 30 出栈后,栈顶元素: 20 再出栈后,栈顶元素: 10 再出栈后,栈是否为空: 是
Analyse du code :
back()Utilisé pour récupérer l'élément au sommet de la pile (le dernier élément empilé).- Une pile est une structure de données de type dernier entré, premier sorti (LIFO),
back()Correspond exactement au sommet de la pile.
Exemple 5 : Obtention dynamique de la valeur maximale
UtilisationbackCoordinationsortObtenir l'élément maximal après tri.
Exemple
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
int main() {
std::srand(std::time(nullptr));
std::vector<int> numbers;
// Générer aléatoirement 5 nombres
for(int i = 0; i < 5; ++i) {
numbers.push_back(std::rand() % 100);
}
std::cout << Données originales :;
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// Trier
std::sort(numbers.begin(), numbers.end());
std::cout << "Après tri : ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
std::cout << Valeur minimale (front) : << numbers.front() << std::endl;
std::cout << Valeur maximale (back) : << numbers.back() << std::endl;
return 0;
}
Analyse du code :
- Après le tri,
front()Renvoie la valeur minimale,back()Renvoie la valeur maximale. - C'est une façon simple d'obtenir la valeur maximale/minimale.
autres extensions