第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的優(yōu)先級隊(duì)列的Pop方法有什么問題?

我的優(yōu)先級隊(duì)列的Pop方法有什么問題?

Go
一只名叫tom的貓 2021-04-16 14:15:51
基于Rob Pike的負(fù)載均衡器演示,我實(shí)現(xiàn)了自己的優(yōu)先級隊(duì)列,但是我的Pop方法不正確,任何人都可以告訴我哪里出了問題嗎?package mainimport (    "fmt"    "container/heap")type ClassRecord struct {    name  string    grade int}type RecordHeap []*ClassRecordfunc (p RecordHeap) Len() int { return len(p) }func (p RecordHeap) Less(i, j int) bool {    return p[i].grade < p[j].grade}func (p *RecordHeap) Swap(i, j int) {    a := *p    a[i], a[j] = a[j], a[i]}func (p *RecordHeap) Push(x interface{}) {    a := *p    n := len(a)    a = a[0 : n+1]    r := x.(*ClassRecord)    a[n] = r    *p = a}func (p *RecordHeap) Pop() interface{} {    a := *p    *p = a[0 : len(a)-1]    r := a[len(a)-1]    return r}func main() {    a := make([]ClassRecord, 6)    a[0] = ClassRecord{"John", 80}    a[1] = ClassRecord{"Dan", 85}    a[2] = ClassRecord{"Aron", 90}    a[3] = ClassRecord{"Mark", 65}    a[4] = ClassRecord{"Rob", 99}    a[5] = ClassRecord{"Brian", 78}    h := make(RecordHeap, 0, 100)    for _, c := range a {        fmt.Println(c)        heap.Push(&h, &c)        fmt.Println("Push: heap has", h.Len(), "items")    }    for i, x := 0, heap.Pop(&h).(*ClassRecord); i < 10 && x != nil; i++ {        fmt.Println("Pop: heap has", h.Len(), "items")        fmt.Println(*x)    }}編輯:除了cthom06指出的方式,另一種解決此問題的方法是創(chuàng)建一個指針數(shù)組,如下所示,a := make([]*ClassRecord, 6)a[0] = &ClassRecord{"John", 80}a[1] = &ClassRecord{"Dan", 85}......
查看完整描述

1 回答

?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個贊

編輯:


哦,我應(yīng)該馬上看到這個。


heap.Push(&h, &c)

您推入c的地址,該地址將在范圍的每次迭代中重用。堆中的每個記錄都是一個指向內(nèi)存中同一區(qū)域的指針,最終成為Brian。我不確定這是預(yù)期的行為還是編譯器錯誤,但是


t := c

heap.Push(&h, &t)

解決它。


另外:您的for循環(huán)是錯誤的。


for h.Len() > 0 {

    x := heap.Pop(&h...

應(yīng)該修復(fù)它。


查看完整回答
反對 回復(fù) 2021-04-26
  • 1 回答
  • 0 關(guān)注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號