Meneruskan Span ke Fungsi
Tulis API yang fleksibel
Meneruskan Span ke Fungsi adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Satu Fungsi, Banyak Kontainer
Fungsi yang menerima std::span dapat menerima array, vektor, dan buffer mentah sekaligus, tanpa memerlukan templat atau kelebihan fungsi.
#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";
}Tidak Perlu Parameter Ukuran
API bergaya C lama meneruskan penunjuk dan ukuran secara terpisah. Span menggabungkan keduanya sehingga menghilangkan kesalahan akibat panjang yang tidak cocok.
#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
}span const untuk Hanya-Baca
Gunakan std::span<const T> untuk menjamin bahwa fungsi tidak akan mengubah data milik 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 yang Dapat Diubah untuk Mengedit Langsung
Span non-const memungkinkan fungsi mengubah elemen milik pemanggil secara langsung.
#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
}Menghindari Pembengkakan Templat
Tanpa span, Anda mungkin membuat templat berdasarkan tipe kontainer sehingga menghasilkan banyak instansiasi. Span memberikan satu deklarasi konkret yang langsung berfungsi.
Menghindari Penyalinan
Meneruskan span tidak pernah menyalin elemennya; hanya penunjuk dan panjang yang diteruskan 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 Masalah
Fungsi harus menangani span kosong dengan baik; size() bernilai nol dan perulangan berbasis rentang cukup berjalan nol 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
}Teruskan Berdasarkan Nilai
Span berukuran kecil, jadi teruskanlah berdasarkan nilai, bukan berdasarkan referensi. Menyalin penunjuk dan panjang pada dasarnya tidak memerlukan biaya.
Dokumentasikan Maksud const
Memilih span<const T> atau span<T> memberi tahu pemanggil secara sekilas apakah data mereka boleh diubah.
Pemanggil Mempertahankan Kepemilikan
Pemanggil tetap memiliki kontainer tersebut; span hanya meminjamnya selama pemanggilan berlangsung. Fungsi tidak boleh menyimpan span setelah pemanggilan selesai.
Gaya API Modern
Menerima span merupakan cara modern yang idiomatis untuk menulis fungsi atas data yang bersebelahan: fleksibel, aman, dan tanpa penyalinan.
Uji Cepat
Uji pemahaman Anda tentang meneruskan span.
Ringkasan
Anda telah mempelajari cara meneruskan span ke fungsi:
- Satu deklarasi dapat menerima array, vektor, dan buffer.
span<const T>untuk hanya-baca;span<T>untuk mengedit langsung.- Teruskan berdasarkan nilai; tidak ada yang disalin.
- Pemanggil tetap memiliki kepemilikan; jangan menyimpan span setelah pemanggilan selesai.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Meneruskan Span ke Fungsi” gratis?
Ya — teks lengkap “Meneruskan Span ke Fungsi” 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 “Meneruskan Span ke Fungsi”?
Tulis API yang fleksibel 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 3 dari 4.
Berapa lama pelajaran “Meneruskan Span ke Fungsi” 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