Überschreiben der Pop()-Methode
Der PHP-Editor Banana stellt Ihnen heute vor, wie Sie die Pop()-Methode neu schreiben. In der Programmierung wird die Methode Pop() verwendet, um das letzte Element eines Arrays zu entfernen und zurückzugeben. Manchmal müssen wir jedoch die Pop()-Methode anpassen, um bestimmte Anforderungen zu erfüllen. Durch Überschreiben der Pop()-Methode können wir zusätzliche Logik hinzufügen oder die zurückgegebenen Elemente ändern, damit sie besser zu unserem Code passen. In diesem Artikel wird detailliert beschrieben, wie die Pop()-Methode überschrieben wird, und es werden einige Beispiele zum besseren Verständnis gegeben. Lasst uns beginnen!
Frageninhalt
Unter der Installation von go gibt es ein Beispiel für eine Prioritätswarteschlange in container/heap/example_pq_test.go
Ich füge den Inhalt der gesamten Datei ein, damit ich die Methode pop() fragen kann.
// copyright 2012 the go authors. all rights reserved. // use of this source code is governed by a bsd-style // license that can be found in the license file. // this example demonstrates a priority queue built using the heap interface. package heap_test import ( "container/heap" "fmt" ) // an item is something we manage in a priority queue. type item struct { value string // the value of the item; arbitrary. priority int // the priority of the item in the queue. // the index is needed by update and is maintained by the heap.interface methods. index int // the index of the item in the heap. } // a priorityqueue implements heap.interface and holds items. type priorityqueue []*item func (pq priorityqueue) len() int { return len(pq) } func (pq priorityqueue) less(i, j int) bool { // we want pop to give us the highest, not lowest, priority so we use greater than here. return pq[i].priority > pq[j].priority } func (pq priorityqueue) swap(i, j int) { pq[i], pq[j] = pq[j], pq[i] pq[i].index = i pq[j].index = j } func (pq *priorityqueue) push(x any) { n := len(*pq) item := x.(*item) item.index = n *pq = append(*pq, item) } func (pq *priorityqueue) pop() any { old := *pq n := len(old) item := old[n-1] old[n-1] = nil // avoid memory leak item.index = -1 // for safety *pq = old[0 : n-1] return item } // update modifies the priority and value of an item in the queue. func (pq *priorityqueue) update(item *item, value string, priority int) { item.value = value item.priority = priority heap.fix(pq, item.index) } // this example creates a priorityqueue with some items, adds and manipulates an item, // and then removes the items in priority order. func example_priorityqueue() { // some items and their priorities. items := map[string]int{ "banana": 3, "apple": 2, "pear": 4, } // create a priority queue, put the items in it, and // establish the priority queue (heap) invariants. pq := make(priorityqueue, len(items)) i := 0 for value, priority := range items { pq[i] = &item{ value: value, priority: priority, index: i, } i++ } heap.init(&pq) // insert a new item and then modify its priority. item := &item{ value: "orange", priority: 1, } heap.push(&pq, item) pq.update(item, item.value, 5) // take the items out; they arrive in decreasing priority order. for pq.len() > 0 { item := heap.pop(&pq).(*item) fmt.printf("%.2d:%s ", item.priority, item.value) } // output: // 05:orange 04:pear 03:banana 02:apple }
Wenn ich eine pop()-Methode wie unten habe (ohne eine tiefe Kopie des Original-Slice zu erstellen), welchen Schaden könnte das anrichten oder liegt da ein Trugschluss vor?
func (pq *PriorityQueue) Pop2() any { n := len(*pq) item := (*pq)[n-1] (*pq)[n-1] = nil // avoid memory leak item.index = -1 // for safety *pq = (*pq)[: n-1] return item }
pop()
-Methode, die old := *pq
schneidet, eine tiefe Kopie erstellt (ein neues zugrunde liegendes Array zuweist). ist das echt? pop()
方法,这一行为切片 old := *pq
创建一个深层副本(分配一个新的底层数组)。这是真的吗?
解决方法
make
函数创建的对象,这里是map
和slice
Lösung
Die von der Funktion make
erstellten Objekte, hier map
und slice
, sind eher Zeiger auf Datenspeicherorte als die Daten selbst. So old := *pq
verhält sich eher wie ein
Das obige ist der detaillierte Inhalt vonÜberschreiben der Pop()-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

In diesem Artikel werden eine Vielzahl von Methoden und Tools eingeführt, um PostgreSQL -Datenbanken im Debian -System zu überwachen, um die Datenbankleistung vollständig zu erfassen. 1. verwenden Sie PostgreSQL, um die Überwachungsansicht zu erstellen. PostgreSQL selbst bietet mehrere Ansichten für die Überwachung von Datenbankaktivitäten: PG_STAT_ACTIVITY: Zeigt Datenbankaktivitäten in Echtzeit an, einschließlich Verbindungen, Abfragen, Transaktionen und anderen Informationen. PG_STAT_REPLIKATION: Monitore Replikationsstatus, insbesondere für Stream -Replikationscluster. PG_STAT_DATABASE: Bietet Datenbankstatistiken wie Datenbankgröße, Transaktionsausschüsse/Rollback -Zeiten und andere Schlüsselindikatoren. 2. Verwenden Sie das Log -Analyse -Tool PGBADG

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Wie kann man im Beegoorm -Framework die mit dem Modell zugeordnete Datenbank angeben? In vielen BeEGO -Projekten müssen mehrere Datenbanken gleichzeitig betrieben werden. Bei Verwendung von BeEGO ...
