Asas std::span
View tanpa pemilikan pada data berjujukan
Asas std::span ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Pandangan Tanpa Pemilikan
std::span<T> (C++20) ialah pandangan ringan terhadap jujukan bersebelahan, seperti string_view tetapi untuk apa-apa jenis unsur. 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 penuding dan panjang; ia memerhati data yang dimiliki di tempat lain dan tidak pernah menyalin unsur tersebut.
#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
}Daripada std::array
Tatasusunan boleh ditukar kepada span secara automatik; span itu melihat semua unsurnya.
#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";
}Daripada vector
std::vector juga boleh ditukar kepada span, lalu memberikan pandangan seragam tanpa mengira bekas asasnya.
#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";
}Daripada Penuding dan Saiz
Anda boleh membina span daripada penuding mentah dan bilangan unsur, yang berguna untuk penimbal gaya C.
#include <iostream>
#include <span>
int main() {
int buf[] = {10, 20, 30};
std::span<int> s(buf, 3);
std::cout << s[1] << "\n"; // 20
}Mengulang Span
Span menyokong gelung for berasaskan julat dan antara muka bekas biasa (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 Baca Sahaja
std::span<const int> memberikan akses baca sahaja; gunakannya apabila fungsi tidak sepatutnya 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
}Boleh Diubah Melalui Span
Span bukan const boleh mengubah unsur asas kerana ia menunjuk kepada data sebenar.
#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
}Jangkauan Dinamik berbanding Statik
Secara lalai, span mempunyai saiz dinamik, tetapi anda boleh menetapkannya pada masa kompilasi dengan std::span<int, 3> untuk semakan tambahan.
Tiada Peruntukan, Murah untuk Dihantar
Seperti semua pandangan, span murah untuk disalin dan dihantar mengikut nilai kerana ia hanya membawa penuding dan panjang.
Beri Perhatian kepada Tempoh Hayat
Span sah hanya selagi sumbernya masih wujud dan tidak diperuntukkan semula. Jangan simpan span kepada vector yang kemudiannya berkembang.
Semakan Pantas
Semak pemahaman anda tentang std::span.
Ringkasan
Anda telah mempelajari asas std::span:
- Pandangan tanpa pemilikan terhadap data bersebelahan (tatasusunan, vector, penimbal mentah).
- Menyimpan penuding dan panjang; tiada penyalinan atau peruntukan.
- Span
constadalah baca sahaja; span boleh ubah menyunting sumber. - Sah hanya selagi sumbernya masih wujud.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Asas std::span” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Asas std::span”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Asas std::span”?
View tanpa pemilikan pada data berjujukan Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Asas std::span” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.