C++ Academy · Ders

Span'leri İşlevlere Aktarma

Esnek API'ler yazın

3. ders / 413 adım

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çin span<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.
Başlamak ücretsiz

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

  1. Sabit Boyutlu std::array
  2. std::span Temelleri
  3. Span'leri İşlevlere Aktarma
  4. Sınırlar ve Alt Span'ler
← C++ Academy Sayfasına Dön