std::transform
- C++ kursu
- Orta seviye
- Ders 73/116
- 5 dk
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
#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
#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?
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
std::____(v.begin(), v.end(), result.begin(), [](int x) { return x * 2; });
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 |