C++ Academy · Pelajaran

Menghantar Span kepada Fungsi

Tulis API yang fleksibel

Pelajaran 3 daripada 413 langkah

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.
Percuma untuk bermula

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

  1. std::array Saiz Tetap
  2. Asas std::span
  3. Menghantar Span kepada Fungsi
  4. Sempadan dan Subspan
← Kembali ke C++ Academy