Span'leri İşlevlere Aktarma
Esnek API'ler yazın
Span'leri İşlevlere Aktarma, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Tek İşlev, Birçok Kapsayıcı
std::span alan bir işlev; dizileri, vektörleri ve ham arabellekleri aynı şekilde kabul eder; şablonlara veya aşırı yüklemelere gerek yoktur.
#include <iostream>
#include <span>
#include <vector>
#include <array>
int sum(std::span<const int> s) {
int t = 0; for (int x : s) t += x; return t;
}
int main() {
std::vector<int> v = {1, 2, 3};
std::array<int, 2> a = {4, 5};
std::cout << sum(v) << " " << sum(a) << "\n";
}Boyut Parametresi Gerekmez
Eski C tarzı API'ler bir işaretçiyle birlikte ayrı bir boyut aktarır. Span her ikisini bir araya getirerek uzunluk uyuşmazlığından kaynaklanan hataları ortadan kaldırır.
#include <iostream>
#include <span>
void printAll(std::span<const int> s) {
for (int x : s) std::cout << x << " ";
std::cout << "\n";
}
int main() {
int buf[] = {7, 8, 9};
printAll(buf); // size inferred
}Salt Okuma için const span
İşlevin çağıranın verilerini değiştirmeyeceğini belirtmek için std::span<const T> kullanın.
#include <iostream>
#include <span>
int maxOf(std::span<const int> s) {
int m = s[0];
for (int x : s) if (x > m) m = x;
return m;
}
int main() {
int data[] = {3, 9, 4};
std::cout << maxOf(data) << "\n"; // 9
}Yerinde Düzenleme için Değiştirilebilir span
Const olmayan bir span, işlevin çağıranın öğelerini doğrudan değiştirmesine olanak tanır.
#include <iostream>
#include <span>
#include <vector>
void doubleAll(std::span<int> s) {
for (int& x : s) x *= 2;
}
int main() {
std::vector<int> v = {1, 2, 3};
doubleAll(v);
std::cout << v[2] << "\n"; // 6
}Şablon Şişkinliğini Önler
Span olmadan kapsayıcı türüne göre şablon oluşturmanız ve birçok örnekleme üretmeniz gerekebilir. Span, doğrudan çalışan tek bir somut imza sağlar.
Kopyalamayı Önler
Bir span aktarmak öğeleri hiçbir zaman kopyalamaz; işlevin içine yalnızca bir işaretçi ve uzunluk aktarılır.
#include <iostream>
#include <span>
#include <vector>
size_t count(std::span<const int> s) { return s.size(); }
int main() {
std::vector<int> big(1000, 0);
std::cout << count(big) << "\n"; // no copy of 1000 ints
}Boş Span'ler Sorun Değildir
Bir işlev boş bir span'i düzgün biçimde ele almalıdır; size() sıfırdır ve aralık tabanlı döngü basitçe sıfır kez çalışır.
#include <iostream>
#include <span>
int sum(std::span<const int> s) { int t = 0; for (int x : s) t += x; return t; }
int main() {
std::span<const int> empty;
std::cout << sum(empty) << "\n"; // 0
}Değer Olarak Aktarın
Span'ler küçüktür; bu nedenle onları başvuru olarak değil, değer olarak aktarın. Bir işaretçiyi ve uzunluğu kopyalamak neredeyse ücretsizdir.
const Amacını Belgeleyin
span<const T> ile span<T> arasında seçim yapmak, çağıranlara verilerinin değiştirilip değiştirilemeyeceğini bir bakışta gösterir.
Sahiplik Çağıranda Kalır
Kapsayıcının sahipliği çağıranda kalır; span yalnızca çağrı süresince kapsayıcıyı ödünç alır. İşlev, span'i çağrı sonrasına saklamamalıdır.
Modern Bir API Tarzı
Bir span kabul etmek, bitişik veriler üzerinde çalışan işlevler yazmanın deyimsel modern yoludur: esnek, güvenli ve kopyalama gerektirmeyen bir yaklaşımdır.
Kısa Kontrol
Span'leri aktarma konusunu anlayıp anlamadığınızı kontrol edin.
Özet
Span'leri işlevlere aktarmayı öğrendiniz:
- Tek bir imza dizileri, vektörleri ve arabellekleri kabul eder.
- Salt okuma için
span<const T>, yerinde düzenleme içinspan<T>kullanılır. - Değer olarak aktarılır ve hiçbir şey kopyalanmaz.
- Sahiplik çağıranda kalır; span'i çağrı sonrasına saklamayın.
Yapay zeka eğitmeniyle C++ öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“Span'leri İşlevlere Aktarma” dersi ücretsiz mi?
Evet — “Span'leri İşlevlere Aktarma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Span'leri İşlevlere Aktarma” dersinde ne öğreneceğim?
Esnek API'ler yazın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Span'leri İşlevlere Aktarma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Sabit Boyutlu std::array
- std::span Temelleri
- Span'leri İşlevlere Aktarma
- Sınırlar ve Alt Span'ler