C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
std::transform ne yapar?
std::transform(v.begin(), v.end(), result.begin(), f);
- Öğeleri sayar
- Öğeleri sıralar
- Her öğeye fonksiyon uygular
- Öğeleri arar
Cevabı göster
Her öğeye fonksiyon uygular — std::transform her öğeye bir fonksiyon uygular.
-
transform çağrısını tamamla
std::____(v.begin(), v.end(), result.begin(), [](int x) { return x * 2; });
Cevabı göster
std::transform(v.begin(), v.end(), result.begin(), [](int x) { return x * 2; });
-
Parametreyi rolüne eşle
- v.begin()
- Giriş başı
- v.end()
- Giriş sonu
- result.begin()
- Çıktı başı
- [](int x) { ... }
- Lambda fonksiyon
Sıradaki ders: std::accumulate