CodeBlanks Logo Icon CodeBlanks

std::transform

std::transform ile dönüştürme öğrenirsin.

std::transform

std::transform bir aralıktaki her öğeye bir fonksiyon uygular ve sonucu başka bir aralığa yazar. İki biçimi vardır: tek aralıklı (unary) ve çift aralıklı (binary). Tek aralıklı: std::transform(v.begin(), v.end(), result.begin(), f).

Fonksiyon f genellikle bir lambda ifadesidir: [](int x) { return x * 2; }. Lambda, küçük adsız fonksiyondur; [] capture clause, (int x) parametre, { return x * 2; } gövdedir. Lambda ifadelerini bir sonraki grupta ayrıntılı göreceksin. result vektörünün boyutu v ile aynı olmalıdır; aksi halde tanımsız davranış oluşur.

Çıktı aralığı

std::transform sonucu başka bir aralığa yazar. Üçüncü parametre çıktı aralığının başlangıcıdır: result.begin(). result vektörü önceden boyutlandırılmalıdır; aksi halde tanımsız davranış oluşur.

Aynı vektöre de yazabilirsin: std::transform(v.begin(), v.end(), v.begin(), f). Bu, her öğeyi yerinde dönüştürür. Örneğin tüm öğeleri ikiye katlamak için [](int x) { return x * 2; } lambda'sını kullanırsın. Çıktı aralığı girişle aynıysa bile güvenlidir; çünkü algoritma öğeleri sırayla işler.

Uygulama Her öğeyi ikiye katla

v = {1, 2, 3} vektörünü std::transform ile result vektörüne dönüştür: lambda [](int x) { return x * 2; } ile her öğeyi ikiye katla. Sonra result'u bir for döngüsüyle boşlukla yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {1, 2, 3};
    std::vector<int> result(3);
    // std::transform ile her öğeyi ikiye katla, result'a yaz, yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {1, 2, 3};
    std::vector<int> result(3);
    std::transform(v.begin(), v.end(), result.begin(),
        [](int x) { return x * 2; });
    for (int x : result) {
        std::cout << x << " ";
    }
    return 0;
}

Beklenen çıktı

2 4 6

Soru ve cevaplar

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

1 std::transform ne yapar?

main.cpp
std::transform(v.begin(), v.end(), result.begin(), f);
  • Öğeleri sayar
  • Öğeleri sıralar
  • Her öğeye fonksiyon uygular Doğru cevap
  • Öğeleri arar

Açıklama: std::transform her öğeye bir fonksiyon uygular.

2 transform çağrısını tamamla

Soru
std::____(v.begin(), v.end(), result.begin(), [](int x) { return x * 2; });
Cevap
std::transform(v.begin(), v.end(), result.begin(), [](int x) { return x * 2; });

Açıklama: std::transform her öğeyi dönüştürür.

3 Parametreyi rolüne eşle

Kavram Anlamı
v.begin() Giriş başı
v.end() Giriş sonu
result.begin() Çıktı başı
[](int x) { ... } Lambda fonksiyon

Orta seviye bölümündeki tüm dersler