C++ Hile Sayfası
Son güncelleme
Hello World ve program yapısı
Çalışma, bir int döndüren main'de başlar.
| Element | Kod |
|---|---|
| Bir başlık ekle (include) | #include <iostream> |
| Giriş noktası | int main() { ... } |
| Bir satır yazdır | std::cout << "Hello, World!" << std::endl; |
| Girdi oku | std::cin >> x; |
| std ad alanını kullan | using namespace std; |
| Başarıyı döndür | return 0; |
| Yorumlar | // line ve /* block */ |
Veri tipleri
| Tip | Açıklama |
|---|---|
int | Tam sayı (genellikle 32 bit) |
long / long long | Daha geniş tam sayılar |
float / double | Kayan noktalı sayılar |
char | Tek bayt / karakter |
bool | true veya false |
std::string | <string>'ten dinamik metin |
auto | Derleyici tipi çıkarır |
std::size_t | Boyutlar ve indeksler için işaretsiz tip |
Değişkenler ve referanslar
Referanslar takma adlardır; işaretçiler adresleri tutar.
| İşlem | Söz dizimi |
|---|---|
| Tanımla ve ilk değer ata | int x = 5; |
| Süslü parantezle ilk değer atama | int x{5}; |
| Sabit | const double PI = 3.14159; |
| Derleme zamanı sabiti | constexpr int N = 10; |
| Referans (takma ad) | int &r = x; |
| İşaretçi | int *p = &x; |
| Bir işaretçinin değerine eriş | *p = 10; |
| Tip çıkarımı | auto y = 3.14; |
Kontrol akışı
| İfade | Söz dizimi |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| While döngüsü | while (i < n) { ... } |
| Do-while döngüsü | do { ... } while (i < n); |
| For döngüsü | for (int i = 0; i < n; i++) { ... } |
| Aralık tabanlı for | for (auto x : vec) { ... } |
| Referansla aralık tabanlı | for (auto &x : vec) { ... } |
| Break / continue | break; bir döngüden çıkar, continue; bir sonraki yinelemeye atlar |
Fonksiyonlar
| İşlem | Söz dizimi |
|---|---|
| Bir fonksiyon tanımla | int add(int a, int b) { return a + b; } |
| Geri dönüş değeri yok | void greet() { ... } |
| Varsayılan argümanlar | int pow(int b, int e = 2) { ... } |
| Referansla geçirme | void inc(int &x) { x++; } |
| Const referans (kopyasız) | void print(const std::string &s) { ... } |
| Aşırı yükleme | int max(int a, int b); ve double max(double a, double b); |
| Lambda | auto f = [](int x) { return x * 2; }; |
| Yakalamalı lambda | auto g = [n](int x) { return x + n; }; |
Sınıflar ve OOP
| İşlem | Söz dizimi |
|---|---|
| Bir sınıf tanımla | class Dog { ... }; |
| Erişim belirteçleri | public:, private:, protected: |
| Üye değişken | std::string name; |
| Yapıcı (constructor) | Dog(std::string n) : name(n) {} |
| Yıkıcı (destructor) | ~Dog() { ... } |
| Üye fonksiyonu | void bark() { ... } |
| Bir nesne oluştur | Dog d("Rex"); |
| Kalıtım | class Puppy : public Dog { ... }; |
| Sanal (virtual) fonksiyon | virtual void speak(); |
STL kapsayıcıları
Standart kütüphaneden yaygın kapsayıcılar.
| Kapsayıcı | Kullanım ve örnek |
|---|---|
std::vector<int> | Dinamik dizi: v.push_back(1); v.size(); |
std::string | Metin: s += "!"; s.length(); |
std::array<int, 3> | Sınır bilgisiyle sabit boyutlu dizi |
std::map<K, V> | Sıralı anahtar-değer: m["a"] = 1; |
std::unordered_map<K, V> | Hash map (daha hızlı arama, sırasız) |
std::set<T> | Sıralı benzersiz değerler: s.insert(5); |
std::pair<A, B> | İki değer: make_pair(1, "x") |
std::queue / std::stack | FIFO kuyruk / LIFO yığın adaptörleri |
STL algoritmaları ve yineleyiciler
<algorithm>'den; çoğu bir begin/end yineleyici aralığı alır.
| İşlem | Söz dizimi |
|---|---|
| Begin / end yineleyicileri | v.begin(), v.end() |
| Sırala | std::sort(v.begin(), v.end()); |
| Azalan sırala | std::sort(v.begin(), v.end(), std::greater<int>()); |
| Bir değer bul | auto it = std::find(v.begin(), v.end(), 5); |
| Eşleşmeleri say | std::count(v.begin(), v.end(), 5); |
| Min / max eleman | std::max_element(v.begin(), v.end()); |
| Bir aralığı topla | std::accumulate(v.begin(), v.end(), 0); |
| Her elemanı dönüştür | std::transform(v.begin(), v.end(), v.begin(), fn); |
Akıllı işaretçiler ve modern C++
Otomatik temizlik için ham new/delete yerine akıllı işaretçileri tercih edin.
| Özellik | Söz dizimi |
|---|---|
| Tekil sahiplik | auto p = std::make_unique<Dog>("Rex"); |
| Paylaşılan sahiplik | auto p = std::make_shared<Dog>("Rex"); |
| Sahiplik içermeyen referans | std::weak_ptr<Dog> w = p; |
| Move semantiği | auto v2 = std::move(v1); |
| Nullptr | int *p = nullptr; |
| Yapılandırılmış bağlamalar | auto [key, val] = *it; |
| İsteğe bağlı değer | std::optional<int> maybe; |
| Şablonlar | template <typename T> T add(T a, T b) { return a + b; } |
En çok başvurduğunuz C++ söz dizimi, STL kapsayıcıları ve modern özellikler tek sayfada. Bu C++ hile sayfası, C++ yazmak için hızlı bir başvurudur - veri tipleri, referanslar, sınıflar, standart kütüphane kapsayıcıları ve algoritmaları ve ham new/delete yerine geçen akıllı işaretçiler.
Buradaki her şey standart C++'tır (C++11 ve sonrası) ve g++ veya clang++ ile derlenir. İhtiyacınız olanı kopyalayın ya da herhangi bir kod parçasını C++ playground'da canlı deneyin - kurmanız gereken bir derleyici yok.
C++ hile sayfası SSS
Bu C++ hile sayfası ücretsiz mi?
C++'ta işaretçi ile referans arasındaki fark nedir?
*p ile değerine erişirsiniz. Bir referans (int &r = x) mevcut bir değişken için takma addır - tanımlandığında bağlanmalıdır, asla null olamaz veya yeniden bağlanamaz ve değişkenin kendisi gibi kullanılır. Daha temiz referansla geçirme parametreleri için referanslar, isteğe bağlı veya yeniden atanabilir dolaylama gerektiğinde işaretçiler kullanın.new/delete mi yoksa akıllı işaretçiler mi kullanmalıyım?
std::unique_ptr ve std::shared_ptr (make_unique/make_shared ile) kapsam dışına çıktıklarında belleklerini otomatik olarak serbest bırakır; bu da manuel new/delete ile gelen bellek sızıntılarını ve çift serbest bırakmaları önler. Ham new/delete'e yalnızca belirli bir nedeni olan düşük seviyeli kodda başvurun.