0Pricing
C++ Academy · Pelajaran

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 const hanya-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

  1. std::array Berukuran Tetap
  2. Dasar-Dasar std::span
  3. Meneruskan Span ke Fungsi
  4. Batas dan Subspan
← Kembali ke C++ Academy