Dasar-Dasar std::span
View tanpa kepemilikan atas data berurutan
Dasar-Dasar std::span adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.
Tampilan Tanpa Kepemilikan
std::span<T> (C++20) adalah tampilan ringan atas urutan elemen yang bersebelahan, seperti string_view tetapi untuk tipe elemen apa pun. Sertakan <span>.
#include <iostream>
#include <span>
#include <array>
int main() {
std::array<int, 3> a = {1, 2, 3};
std::span<int> s = a;
std::cout << s.size() << "\n";
}Span Tidak Memiliki Data
Span menyimpan penunjuk dan panjang; span mengamati data yang dimiliki di tempat lain dan tidak pernah menyalin elemennya.
#include <iostream>
#include <vector>
#include <span>
int main() {
std::vector<int> v = {5, 6, 7};
std::span<int> s = v;
s[0] = 50; // modifies v
std::cout << v[0] << "\n"; // 50
}Dari std::array
Array dapat dikonversi menjadi span secara otomatis; span tersebut melihat semua elemennya.
#include <iostream>
#include <span>
#include <array>
int main() {
std::array<int, 4> a = {1, 2, 3, 4};
std::span<int> s{a};
for (int x : s) std::cout << x << " ";
std::cout << "\n";
}Dari Vektor
std::vector juga dapat dikonversi menjadi span, sehingga memberikan tampilan seragam tanpa memedulikan kontainer yang mendasarinya.
#include <iostream>
#include <vector>
#include <span>
int main() {
std::vector<int> v = {9, 8, 7};
std::span<int> s = v;
std::cout << s.front() << " " << s.back() << "\n";
}Dari Penunjuk dan Ukuran
Anda dapat membuat span dari penunjuk mentah dan jumlah elemen, yang berguna untuk buffer bergaya C.
#include <iostream>
#include <span>
int main() {
int buf[] = {10, 20, 30};
std::span<int> s(buf, 3);
std::cout << s[1] << "\n"; // 20
}Melakukan Iterasi pada Span
Span mendukung perulangan berbasis rentang dan antarmuka kontainer yang umum (size, front, back, data).
#include <iostream>
#include <span>
int main() {
int buf[] = {2, 4, 6, 8};
std::span<int> s(buf, 4);
int sum = 0;
for (int x : s) sum += x;
std::cout << sum << "\n"; // 20
}Span Hanya-Baca
std::span<const int> memberikan akses hanya-baca; gunakan ini ketika fungsi tidak boleh mengubah data.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 2, 3};
std::span<const int> s(buf, 3);
std::cout << s[2] << "\n"; // 3
}Dapat Diubah melalui Span
Span non-const dapat mengubah elemen yang mendasarinya karena menunjuk langsung ke data sebenarnya.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 1, 1};
std::span<int> s(buf, 3);
for (int& x : s) x *= 10;
std::cout << buf[2] << "\n"; // 10
}Cakupan Dinamis vs Statis
Secara bawaan, span memiliki ukuran dinamis, tetapi Anda dapat menetapkannya saat kompilasi dengan std::span<int, 3> untuk pemeriksaan tambahan.
Tanpa Alokasi, Murah untuk Diteruskan
Seperti semua tampilan, span murah untuk disalin dan diteruskan berdasarkan nilai karena hanya membawa penunjuk dan panjang.
Perhatikan Masa Berlaku
Span hanya valid selama sumbernya masih ada dan belum dialokasikan ulang. Jangan menyimpan span ke vektor yang nantinya bertambah besar.
Uji Cepat
Uji pemahaman Anda tentang std::span.
Ringkasan
Anda telah mempelajari dasar-dasar std::span:
- Tampilan tanpa kepemilikan atas data yang bersebelahan (array, vektor, buffer mentah).
- Menyimpan penunjuk dan panjang; tanpa penyalinan atau alokasi.
- Span
consthanya-baca; span yang dapat diubah mengedit sumbernya. - Hanya valid selama sumbernya masih ada.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar std::span” gratis?
Ya — teks lengkap “Dasar-Dasar std::span” 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 “Dasar-Dasar std::span”?
View tanpa kepemilikan atas data berurutan 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 2 dari 4.
Berapa lama pelajaran “Dasar-Dasar std::span” 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.
Semua pelajaran dalam kursus ini
- std::array Berukuran Tetap
- Dasar-Dasar std::span
- Meneruskan Span ke Fungsi
- Batas dan Subspan