Aide-mémoire C++
Dernière mise à jour
Hello World et structure d'un programme
L'exécution démarre à main, qui renvoie un int.
| Élément | Code |
|---|---|
| Inclure un en-tête | #include <iostream> |
| Point d'entrée | int main() { ... } |
| Afficher une ligne | std::cout << "Hello, World!" << std::endl; |
| Lire une saisie | std::cin >> x; |
| Utiliser l'espace de noms std | using namespace std; |
| Renvoyer un succès | return 0; |
| Commentaires | // line et /* block */ |
Types de données
| Type | Description |
|---|---|
int | Entier (généralement 32 bits) |
long / long long | Entiers plus larges |
float / double | Nombres à virgule flottante |
char | Octet / caractère unique |
bool | true ou false |
std::string | Texte dynamique de <string> |
auto | Le compilateur infère le type |
std::size_t | Type non signé pour les tailles et les indices |
Variables et références
Les références sont des alias ; les pointeurs contiennent des adresses.
| Opération | Syntaxe |
|---|---|
| Déclarer et initialiser | int x = 5; |
| Initialisation par accolades | int x{5}; |
| Constante | const double PI = 3.14159; |
| Constante de compilation | constexpr int N = 10; |
| Référence (alias) | int &r = x; |
| Pointeur | int *p = &x; |
| Déréférencer un pointeur | *p = 10; |
| Inférence de type | auto y = 3.14; |
Contrôle de flux
| Instruction | Syntaxe |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| Boucle while | while (i < n) { ... } |
| Boucle do-while | do { ... } while (i < n); |
| Boucle for | for (int i = 0; i < n; i++) { ... } |
| For basé sur une plage | for (auto x : vec) { ... } |
| For basé sur une plage par référence | for (auto &x : vec) { ... } |
| Break / continue | break; sort d'une boucle, continue; passe à l'itération suivante |
Fonctions
| Opération | Syntaxe |
|---|---|
| Définir une fonction | int add(int a, int b) { return a + b; } |
| Sans valeur de retour | void greet() { ... } |
| Arguments par défaut | int pow(int b, int e = 2) { ... } |
| Passage par référence | void inc(int &x) { x++; } |
| Référence const (sans copie) | void print(const std::string &s) { ... } |
| Surcharge | int max(int a, int b); et double max(double a, double b); |
| Lambda | auto f = [](int x) { return x * 2; }; |
| Lambda avec capture | auto g = [n](int x) { return x + n; }; |
Classes et POO
| Opération | Syntaxe |
|---|---|
| Définir une classe | class Dog { ... }; |
| Spécificateurs d'accès | public:, private:, protected: |
| Variable membre | std::string name; |
| Constructeur | Dog(std::string n) : name(n) {} |
| Destructeur | ~Dog() { ... } |
| Fonction membre | void bark() { ... } |
| Créer un objet | Dog d("Rex"); |
| Héritage | class Puppy : public Dog { ... }; |
| Fonction virtuelle | virtual void speak(); |
Conteneurs STL
Conteneurs courants de la bibliothèque standard.
| Conteneur | Usage et exemple |
|---|---|
std::vector<int> | Tableau dynamique : v.push_back(1); v.size(); |
std::string | Texte : s += "!"; s.length(); |
std::array<int, 3> | Tableau de taille fixe avec info de bornes |
std::map<K, V> | Clé-valeur triée : m["a"] = 1; |
std::unordered_map<K, V> | Table de hachage (recherche plus rapide, sans ordre) |
std::set<T> | Valeurs uniques triées : s.insert(5); |
std::pair<A, B> | Deux valeurs : make_pair(1, "x") |
std::queue / std::stack | Adaptateurs file FIFO / pile LIFO |
Algorithmes et itérateurs STL
De <algorithm> ; la plupart prennent une plage d'itérateurs begin/end.
| Opération | Syntaxe |
|---|---|
| Itérateurs begin / end | v.begin(), v.end() |
| Trier | std::sort(v.begin(), v.end()); |
| Trier en décroissant | std::sort(v.begin(), v.end(), std::greater<int>()); |
| Trouver une valeur | auto it = std::find(v.begin(), v.end(), 5); |
| Compter les correspondances | std::count(v.begin(), v.end(), 5); |
| Élément min / max | std::max_element(v.begin(), v.end()); |
| Sommer une plage | std::accumulate(v.begin(), v.end(), 0); |
| Transformer chaque élément | std::transform(v.begin(), v.end(), v.begin(), fn); |
Pointeurs intelligents et C++ moderne
Préférez les pointeurs intelligents aux new/delete bruts pour un nettoyage automatique.
| Fonctionnalité | Syntaxe |
|---|---|
| Propriété unique | auto p = std::make_unique<Dog>("Rex"); |
| Propriété partagée | auto p = std::make_shared<Dog>("Rex"); |
| Référence non propriétaire | std::weak_ptr<Dog> w = p; |
| Sémantique de déplacement | auto v2 = std::move(v1); |
| Nullptr | int *p = nullptr; |
| Liaisons structurées | auto [key, val] = *it; |
| Valeur optionnelle | std::optional<int> maybe; |
| Templates | template <typename T> T add(T a, T b) { return a + b; } |
La syntaxe C++, les conteneurs STL et les fonctionnalités modernes que vous utilisez le plus, sur une seule page. Cet aide-mémoire C++ est une référence rapide pour écrire du C++ - les types de données, les références, les classes, les conteneurs et algorithmes de la bibliothèque standard, ainsi que les pointeurs intelligents qui remplacent les new/delete bruts.
Tout ce qui figure ici est du C++ standard (C++11 et ultérieur) et se compile avec g++ ou clang++. Copiez ce dont vous avez besoin, ou essayez n'importe quel extrait en direct dans le playground C++ - aucun compilateur à installer.
FAQ de l'aide-mémoire C++
Cet aide-mémoire C++ est-il gratuit ?
Quelle est la différence entre un pointeur et une référence en C++ ?
*p. Une référence (int &r = x) est un alias d'une variable existante - elle doit être liée à la déclaration, ne peut jamais être nulle ni reliée, et s'utilise comme la variable elle-même. Utilisez les références pour des paramètres passés par référence plus propres, et les pointeurs lorsque vous avez besoin d'une indirection optionnelle ou réaffectable.Dois-je utiliser new/delete ou des pointeurs intelligents ?
std::unique_ptr et std::shared_ptr (via make_unique/make_shared) libèrent leur mémoire automatiquement lorsqu'ils sortent de portée, ce qui évite les fuites et les doubles libérations liées aux new/delete manuels. Ne recourez aux new/delete bruts que dans du code bas niveau ayant une raison spécifique.