Sınırlar ve Alt Span'ler
Span'leri güvenle dilimleyin
Sınırlar ve Alt Span'ler, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. 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.
subspan ile Dilimleme
s.subspan(offset, count), orijinalin bir bölümü üzerinde bir span döndürür; kopyalama yapmaz, yalnızca yeni bir işaretçi ve uzunluk oluşturur.
#include <iostream>
#include <span>
int main() {
int buf[] = {0, 1, 2, 3, 4};
std::span<int> s(buf, 5);
auto mid = s.subspan(1, 3);
for (int x : mid) std::cout << x << " ";
std::cout << "\n"; // 1 2 3
}first ve last
first(n) ve last(n), baştaki veya sondaki n öğe üzerinde span'ler sağlar.
#include <iostream>
#include <span>
int main() {
int buf[] = {10, 20, 30, 40};
std::span<int> s(buf, 4);
auto f = s.first(2);
auto l = s.last(2);
std::cout << f[0] << " " << l[1] << "\n"; // 10 40
}Alt Span'ler Belleği Paylaşır
Bir alt span'i değiştirmek orijinal veriyi de değiştirir; çünkü ikisi de aynı arabelleği gösterir.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 1, 1, 1};
std::span<int> s(buf, 4);
auto tail = s.last(2);
tail[0] = 99;
std::cout << buf[2] << "\n"; // 99
}size_bytes
size_bytes(), span'in öğelerinin toplam bayt boyutunu döndürür; düşük düzeyli G/Ç işlemleri için kullanışlıdır.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 2, 3};
std::span<int> s(buf, 3);
std::cout << s.size_bytes() << "\n"; // 3 * sizeof(int)
}Sınırlar Sizin Sorumluluğunuzdadır
Bir span üzerindeki operator[] için sınır denetimi yapılmaz. s[s.size()] okumak tanımsız davranıştır.
Dilimlemeden Önce Denetleyin
subspan'i span'den daha büyük bir konum veya sayaçla çağırmak tanımsız davranıştır; önce size() değerine göre doğrulama yapın.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 2, 3};
std::span<int> s(buf, 3);
size_t off = 1, cnt = 2;
if (off + cnt <= s.size()) {
auto sub = s.subspan(off, cnt);
std::cout << sub.size() << "\n";
}
}Dilimleme Sonrası Boşluk
Dilimleme boş bir span üretebilir; örneğin first(0). Bunu her boş aralık gibi ele alın.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 2};
std::span<int> s(buf, 2);
auto e = s.first(0);
std::cout << e.empty() << "\n"; // 1
}Dilimleri Zincirleme
Alt span'ler daha fazla dilimlenebilir; çünkü her biri orijinal arabelleğin başka bir görünümüdür.
#include <iostream>
#include <span>
int main() {
int buf[] = {0, 1, 2, 3, 4, 5};
std::span<int> s(buf, 6);
auto inner = s.subspan(1, 4).first(2);
std::cout << inner[0] << " " << inner[1] << "\n"; // 1 2
}Parçalar Hâlinde İşleme
subspan'in yaygın bir kullanımı, büyük bir arabellek üzerinde akış veya toplu işleme için sabit boyutlu pencerelerle yineleme yapmaktır.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 2, 3, 4, 5, 6};
std::span<int> s(buf, 6);
for (size_t i = 0; i < s.size(); i += 2) {
auto chunk = s.subspan(i, 2);
std::cout << "[" << chunk[0] << "," << chunk[1] << "] ";
}
std::cout << "\n";
}Statik Kapsam Denetimleri
Statik kapsamlı bir span ile derleyici bazı dilim boyutlarını derleme zamanında doğrulayabilir ve hataları daha erken yakalayabilir.
Ömür Süresi Hâlâ Geçerlidir
Her alt span, orijinal arabelleğin ömrünü paylaşır. Kaynak yok edilirse veya yeniden ayrılırsa türetilen tüm span'ler geçersiz olur.
Kısa Kontrol
Alt span'leri ve sınırları anlayıp anlamadığınızı kontrol edin.
Özet
Sınırları ve alt span'leri öğrendiniz:
subspan,firstvelastayırma yapmadan dilimler oluşturur.- Alt span'ler belleği paylaşır; yapılan değişiklikler orijinali etkiler.
operator[]ve dilimleme sınır denetimi yapmaz; önce doğrulama yapın.- Tüm alt span'ler kaynağın ömrünü paylaşır.
Sıkça Sorulan Sorular
“Sınırlar ve Alt Span'ler” dersi ücretsiz mi?
Evet — “Sınırlar ve Alt Span'ler” 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.
“Sınırlar ve Alt Span'ler” dersinde ne öğreneceğim?
Span'leri güvenle dilimleyin 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 4. dersidir.
“Sınırlar ve Alt Span'ler” 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