CodeBlanks Logo Icon CodeBlanks

Structured bindings

Structured bindings ile çoklu değişken atamayı öğrenirsin.

Structured bindings

Structured bindings (C++17), bir struct, pair veya tuple'ın üyelerini tek satırda ayrı değişkenlere bağlar. Sözdizimi: auto [a, b] = çift;. Burada a ve b, çift.first ve çift.second için yerel adlar olur.

Bu, p.first ve p.second yazmakten daha okunaklıdır. Bir fonksiyon birden fazla değer döndürmek için std::pair veya std::tuple kullanıyorsa, çağıran taraf bağlayıcı ile sonucu kolayca açar.

std::pair ile çoklu dönüş

Bir fonksiyon iki değer döndürmek istiyorsa std::pair<T1, T2> kullanır. Çağıran taraf auto [a, b] = func(); ile sonucu açar. Örnek: std::pair<bool, int> find(int x) bulunduğunu ve değeri döndürür.

Structured bindings, std::get<0> ve std::get<1> yazmaktan daha temizdir. Derleyici her üye için ayrı değişken üretir; çalışma zamanı maliyeti yoktur. Aynı sözdizimi std::array ve Plain struct'lar için de çalışır.

Uygulama min_max fonksiyonunu bağla

std::pair<int, int> min_max(int a, int b) fonksiyonunu yaz: küçük olanı first, büyük olanı second yapsın. main içinde sonucu auto [mn, mx] = min_max(7, 3); ile bağla ve mn değerini std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <utility>

// min_max fonksiyonunu yaz

int main() {
    // Sonucu bağla ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <utility>

std::pair<int, int> min_max(int a, int b) {
    return {std::min(a, b), std::max(a, b)};
}

int main() {
    auto [mn, mx] = min_max(7, 3);
    std::cout << mn;
    return 0;
}

Beklenen çıktı

3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bağlama sözdizimini tamamla

Soru
auto ____ = make_pair(3, 7);
Cevap
auto [a, b] = make_pair(3, 7);

Açıklama: Köşeli parantez structured bindings için kullanılır.

2 Hangi satır geçerli bir structured binding?

  • auto (a, b) = p;
  • auto [a, b] = p; Doğru cevap
  • auto {a, b} = p;
  • auto <a, b> = p;

Açıklama: Köşeli parantez structured bindings için kullanılır.

3 Sözdizimini amacına eşle

Kavram Anlamı
auto [a, b] = p Pair üyelerini bağla
auto [a, b, c] = t Tuple üyelerini bağla
auto& [a, b] = p Referans ile bağla
auto [a, b]{a, b} Şablon değil

İleri seviye bölümündeki tüm dersler