Batas dan Subspan
Iris span dengan aman
Batas dan Subspan adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Pemotongan dengan subspan
s.subspan(offset, count) mengembalikan span atas sebagian span asli, tanpa penyalinan, hanya penunjuk dan panjang baru.
#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 dan last
first(n) dan last(n) memberikan span atas n elemen awal atau akhir.
#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
}Subspan Berbagi Memori
Mengubah subspan akan mengubah data asli karena keduanya menunjuk ke buffer yang sama.
#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() mengembalikan total ukuran dalam byte dari elemen span, yang berguna untuk masukan/keluaran tingkat rendah.
#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)
}Batas Menjadi Tanggung Jawab Anda
operator[] pada span tidak memeriksa batas. Membaca s[s.size()] merupakan perilaku yang tidak terdefinisi.
Periksa Sebelum Memotong
Memanggil subspan dengan offset atau jumlah elemen yang lebih besar daripada span merupakan perilaku yang tidak terdefinisi; lakukan validasi terhadap size() terlebih dahulu.
#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";
}
}Kosong Setelah Dipotong
Pemotongan dapat menghasilkan span kosong (misalnya first(0)); tangani seperti rentang kosong lainnya.
#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
}Merangkai Potongan
Subspan dapat dipotong lagi karena setiap subspan hanyalah tampilan lain ke dalam buffer asli.
#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
}Memproses dalam Beberapa Bagian
Penggunaan umum subspan adalah melakukan iterasi pada buffer besar dalam jendela berukuran tetap untuk streaming atau pemrosesan secara berkelompok.
#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";
}Pemeriksaan Cakupan Statis
Dengan span bercakupan statis, kompilator dapat memverifikasi beberapa ukuran potongan saat kompilasi sehingga kesalahan dapat ditemukan lebih awal.
Masa Berlaku Tetap Berlaku
Setiap subspan berbagi masa berlaku buffer asli. Jika sumber dihancurkan atau dialokasikan ulang, semua span turunannya menjadi tidak valid.
Uji Cepat
Uji pemahaman Anda tentang subspan dan batas.
Ringkasan
Anda telah mempelajari batas dan subspan:
subspan,first, danlastmembuat potongan tanpa alokasi.- Subspan berbagi memori; perubahan memengaruhi data asli.
operator[]dan pemotongan tidak memeriksa batas; lakukan validasi terlebih dahulu.- Semua subspan berbagi masa berlaku sumbernya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Batas dan Subspan” gratis?
Ya — teks lengkap “Batas dan Subspan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Batas dan Subspan”?
Iris span dengan aman Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Batas dan Subspan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.