Mengapakah kapasiti hirisan berkurangan apabila menjatuhkan dua elemen pertama dalam slaid Go Tour 11, tetapi tidak apabila memanjangkan panjang kepingan?

Mary-Kate Olsen
Lepaskan: 2024-11-06 06:43:03
asal
831 orang telah melayarinya

Why does the slice capacity decrease when dropping the first two elements in Go Tour slide 11, but not when extending the slice length?

Memahami Perubahan Kapasiti Slice dalam Go Tour #11

Go Tour menyediakan demonstrasi yang mendalam tentang ciri bahasa, termasuk kepingan. Dalam slaid 11, sekeping integer dimanipulasi untuk menunjukkan sifatnya. Walau bagaimanapun, satu pemerhatian menimbulkan persoalan: mengapa kapasiti hirisan berubah pada baris terakhir, sedangkan ia kekal tidak berubah dalam operasi sebelumnya?

Memahami Kesan Manipulasi Slice pada Kapasiti

Kapasiti hirisan merujuk kepada bilangan maksimum elemen yang boleh disimpan oleh tatasusunan asas sebelum pengagihan semula diperlukan. Coretan kod Go Tour melakukan operasi berikut:

  1. Penciptaan: Potongan awal s dibuat dengan panjang dan kapasiti 6.
  2. Menghiris kepada Panjang Sifar: s[:0] mencipta kepingan baharu bermula dari permulaan s dan berakhir pada indeks 0, dengan berkesan memotongnya kepada panjang sifar. Kapasiti kekal 6 kerana tiada unsur dialih keluar daripada tatasusunan sandaran.
  3. Melanjutkan Panjang Slice: s[:4] memanjangkan kepingan untuk memasukkan empat elemen pertama. Kapasiti kekal 6 kerana masih terdapat ruang dalam tatasusunan belakang.
  4. Menggugurkan Dua Nilai Pertama: s[2:] mengalih keluar dua elemen pertama s, tetapi kapasiti berkurangan kepada 4 . Ini berlaku kerana kepingan masih memegang elemen yang tinggal dan jarak antara permulaan kepingan (s[2]) dan penghujung tatasusunan sokongan telah berkurangan.

Sebab untuk Pengurangan Kapasiti dalam Baris Terakhir

  • Pergerakan Penunjuk Data Slice: Menggugurkan dua elemen pertama menggerakkan penunjuk data hirisan dua kedudukan ke kanan. Ini secara berkesan mengurangkan jarak antara permulaan hirisan dan penghujung tatasusunan sandaran.
  • Tiada Kesan pada Tatasusunan Sandaran: Semua operasi hirisan hanya mengubah suai pengepala hirisan, bukan tatasusunan sandaran . Tatasusunan sandaran kekal tidak berubah, dengan kapasiti 6.

Memvisualisasikan Perubahan Pengepala

Kod berikut mencetak pengepala kepingan, yang memberikan cerapan tambahan tentang perubahan:

<code class="go">func printSlice(s []int) {
    sh := (*reflect.SliceHeader)(unsafe.Pointer(&s))
    fmt.Printf("header=%+v len=%d cap=%d %v\n", sh, len(s), cap(s), s)
}</code>
Salin selepas log masuk

Output menunjukkan bahawa penuding Data pengepala bergerak dari 272990208 kepada 272990216 apabila dua elemen pertama digugurkan, mengurangkan kapasiti hirisan.

Atas ialah kandungan terperinci Mengapakah kapasiti hirisan berkurangan apabila menjatuhkan dua elemen pertama dalam slaid Go Tour 11, tetapi tidak apabila memanjangkan panjang kepingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!