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

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

向量分配是通過值還是通過引用以Google的Go語言復制的?

向量分配是通過值還是通過引用以Google的Go語言復制的?

Go
蕪湖不蕪 2021-04-16 14:15:21
在下面的代碼中,我創(chuàng)建了一個釘子拼圖,然后對其進行了移動,從而向其movesAlreadyDone向量添加了移動。然后,我創(chuàng)建另一個釘子拼圖,然后對其進行移動,從而向其movesAlreadyDone向量添加一個動作。當我打印出第二個矢量在該向量中的值時,它具有從第一個矢量到第二個矢量的移動。誰能告訴我為什么它似乎是通過引用而不是價值來分配的?向量分配是通過值還是通過引用以Google的Go語言復制的?package mainimport "fmt"import "container/vector"type Move struct { x0, y0, x1, y1 int }type PegPuzzle struct {    movesAlreadyDone * vector.Vector;}func (p *PegPuzzle) InitPegPuzzle(){    p.movesAlreadyDone = vector.New(0);}func NewChildPegPuzzle(parent *PegPuzzle) *PegPuzzle{    retVal := new(PegPuzzle);    retVal.movesAlreadyDone = parent.movesAlreadyDone;    return retVal}func (p *PegPuzzle) doMove(move Move){    p.movesAlreadyDone.Push(move);}func (p *PegPuzzle) printPuzzleInfo(){    fmt.Printf("-----------START----------------------\n");    fmt.Printf("moves already done: %v\n", p.movesAlreadyDone);    fmt.Printf("------------END-----------------------\n");}func main() {    p := new(PegPuzzle);    cp1 := new(PegPuzzle);    cp2 := new(PegPuzzle);    p.InitPegPuzzle();    cp1 = NewChildPegPuzzle(p);    cp1.doMove(Move{1,1,2,3});    cp1.printPuzzleInfo();    cp2 = NewChildPegPuzzle(p);    cp2.doMove(Move{3,2,5,1});    cp2.printPuzzleInfo();}任何幫助將不勝感激。謝謝!
查看完整描述

2 回答

?
qq_笑_17

TA貢獻1818條經(jīng)驗 獲得超7個贊

在您的代碼中,movesAlreadyDone是*vector.Vector;; 分配時retVal.movesAlreadyDone = parent.movesAlreadyDone;,您正在復制參考。每當在其中一個上進行矢量修改時,retVal.movesAlreadyDone或者parent.movesAlreadyDone您將修改相同的基礎矢量。


如果要將一個向量的內(nèi)容復制到另一個向量,則需要遍歷源向量并將其元素推送到目標向量。像這樣:


for n := range srcVect.Iter() {

    dstVect.Push(n);

}


查看完整回答
反對 回復 2021-04-26
  • 2 回答
  • 0 關注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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