Menghantar Span kepada Fungsi
Tulis API yang fleksibel
Menghantar Span kepada Fungsi ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 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.
Satu Fungsi, Banyak Bekas
Fungsi yang menerima std::span menerima tatasusunan, vector dan penimbal mentah dengan cara yang sama, tanpa templat atau lebihan fungsi diperlukan.
#include <iostream>
#include <span>
#include <vector>
#include <array>
int sum(std::span<const int> s) {
int t = 0; for (int x : s) t += x; return t;
}
int main() {
std::vector<int> v = {1, 2, 3};
std::array<int, 2> a = {4, 5};
std::cout << sum(v) << " " << sum(a) << "\n";
}Tiada Parameter Saiz Diperlukan
API gaya C lama menghantar penuding bersama saiz berasingan. Span menggabungkan kedua-duanya, lalu menghapuskan pepijat panjang yang tidak sepadan.
#include <iostream>
#include <span>
void printAll(std::span<const int> s) {
for (int x : s) std::cout << x << " ";
std::cout << "\n";
}
int main() {
int buf[] = {7, 8, 9};
printAll(buf); // size inferred
}const span untuk Baca Sahaja
Gunakan std::span<const T> untuk menjanjikan bahawa fungsi tidak akan mengubah data pemanggil.
#include <iostream>
#include <span>
int maxOf(std::span<const int> s) {
int m = s[0];
for (int x : s) if (x > m) m = x;
return m;
}
int main() {
int data[] = {3, 9, 4};
std::cout << maxOf(data) << "\n"; // 9
}Span Boleh Ubah untuk Menyunting di Tempat
Span bukan const membolehkan fungsi mengubah unsur pemanggil secara terus.
#include <iostream>
#include <span>
#include <vector>
void doubleAll(std::span<int> s) {
for (int& x : s) x *= 2;
}
int main() {
std::vector<int> v = {1, 2, 3};
doubleAll(v);
std::cout << v[2] << "\n"; // 6
}Mengelakkan Penggelembungan Templat
Tanpa span, anda mungkin menggunakan templat berdasarkan jenis bekas, lalu menjana banyak pengkhususan. Span memberikan satu tandatangan konkrit yang terus berfungsi.
Mengelakkan Penyalinan
Menghantar span tidak pernah menyalin unsur; hanya penuding dan panjang dihantar ke dalam fungsi.
#include <iostream>
#include <span>
#include <vector>
size_t count(std::span<const int> s) { return s.size(); }
int main() {
std::vector<int> big(1000, 0);
std::cout << count(big) << "\n"; // no copy of 1000 ints
}Span Kosong Tidak Menjadi Masalah
Fungsi sepatutnya mengendalikan span kosong dengan baik; size() ialah sifar dan gelung for berasaskan julat hanya berjalan sifar kali.
#include <iostream>
#include <span>
int sum(std::span<const int> s) { int t = 0; for (int x : s) t += x; return t; }
int main() {
std::span<const int> empty;
std::cout << sum(empty) << "\n"; // 0
}Hantar Mengikut Nilai
Span sangat kecil, jadi hantarkannya mengikut nilai, bukan mengikut rujukan. Menyalin penuding dan panjang pada asasnya tidak memerlukan kos.
Dokumentasikan Niat const
Memilih span<const T> berbanding span<T> memberitahu pemanggil sepintas lalu sama ada data mereka mungkin diubah.
Pemanggil Mengekalkan Pemilikan
Pemanggil masih memiliki bekas tersebut; span hanya meminjamnya sepanjang panggilan. Fungsi tidak boleh menyimpan span selepas panggilan tamat.
Gaya API Moden
Menerima span ialah cara moden yang lazim untuk menulis fungsi bagi data bersebelahan: fleksibel, selamat dan tanpa penyalinan.
Semakan Pantas
Semak pemahaman anda tentang penghantaran span.
Ringkasan
Anda telah mempelajari cara menghantar span kepada fungsi:
- Satu tandatangan menerima tatasusunan, vector dan penimbal.
span<const T>untuk baca sahaja;span<T>untuk menyunting di tempat.- Hantar mengikut nilai; tiada apa-apa disalin.
- Pemanggil mengekalkan pemilikan; jangan simpan span selepas panggilan tamat.
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 “Menghantar Span kepada Fungsi” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Menghantar Span kepada Fungsi”, 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 “Menghantar Span kepada Fungsi”?
Tulis API yang fleksibel 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 3 daripada 4.
Berapa lamakah pelajaran “Menghantar Span kepada Fungsi” 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.
Semua pelajaran dalam kursus ini
- std::array Saiz Tetap
- Asas std::span
- Menghantar Span kepada Fungsi
- Sempadan dan Subspan