最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Golang切片截取功能與C++的vector區(qū)別

 更新時(shí)間:2022年10月11日 15:10:36   作者:go_hzx  
這篇文章主要介紹了Golang中切片的截取功能與C++中的vector有什么區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧

淺析golang切片截取(刪除)功能

1. 引言

golang的切片被認(rèn)為是和C++的vector容器類似,都可以認(rèn)為是動(dòng)態(tài)數(shù)組,但又不完全一樣。

那么區(qū)別到底在哪里呢?對(duì)元素的刪除方式是很重要的一點(diǎn)區(qū)別

  • 對(duì)于C++的vector來(lái)說(shuō),用erase函數(shù)來(lái)刪除元素,其原理是將當(dāng)前位置后面的元素都向前移動(dòng)一位,刪除一個(gè)元素的平均時(shí)間復(fù)雜度為O(n)
  • 對(duì)于golang的slice來(lái)說(shuō),沒(méi)有用來(lái)刪除元素的函數(shù),但是其可以通過(guò)改變指向底層數(shù)組的指針和append的方式巧妙的實(shí)現(xiàn)元素的刪除,對(duì)頭部元素和尾部元素刪除時(shí)間復(fù)雜度都為O(1),所以可以用切片來(lái)模擬棧和隊(duì)列,而C++用vector模擬隊(duì)列的時(shí)間復(fù)雜度過(guò)高,C++隊(duì)列的底層是deque,下文將利用代碼進(jìn)行具體分析

2.分析過(guò)程

2.1 s[:]的方式截取元素

可以利用s[1:]的方式來(lái)刪除切片的第一個(gè)元素,產(chǎn)生的新切片仍舊與原切片共用一個(gè)底層數(shù)組,只是將底層數(shù)組的指針向后移動(dòng)了一位。所以修改s2的元素,s1的元素也會(huì)改變。這一點(diǎn)是和vector最不同的,slice刪除頭部元素只需要O(1)的時(shí)間復(fù)雜度

func main() {
	// 驗(yàn)證切片的截取功能
	s1 := []int{1,2,3,4,5}
	s2 := s1[1:]
	fmt.Println("切片s1:",s1)
	fmt.Println("切片s2:",s2)
	s2[0] = 6
	fmt.Println("修改s2的第一個(gè)元素后,切片s1:",s1)
	fmt.Println("修改s2的第一個(gè)元素后,切片s2:",s2)
}

上面這段代碼的輸出結(jié)果為:

2.2 append的方式截取元素

用append截取s1得到s3。append截取的方式類似于erase,后面的元素會(huì)向前移動(dòng)。但是由于s3和s2,s1共用一個(gè)底層數(shù)組,截取得到s3時(shí),s1,s2的元素也會(huì)改變。對(duì)于中間元素的刪除slice和vector時(shí)間復(fù)雜度相同

func main() {
	// 驗(yàn)證切片的截取功能
	s1 := []int{1,2,3,4,5}
	s2 := s1[1:]
	s3 := append(s1[0:2],s1[3:]...)
	fmt.Println("切片s1:",s1)
	fmt.Println("切片s2:",s2)
	fmt.Println("切片s3:",s3)
	s2[0] = 6
	fmt.Println("修改s2的第一個(gè)元素后,切片s1:",s1)
	fmt.Println("修改s2的第一個(gè)元素后,切片s2:",s2)
	fmt.Println("修改s2的第一個(gè)元素后,切片s3:",s3)
}

輸出結(jié)果為:

3. 結(jié)論

正是由于slice可以方便的刪除頭部元素和尾部元素,所以用其模擬棧和隊(duì)列。而vector對(duì)于頭部元素的刪除復(fù)雜度太高,所以不建議用vector實(shí)現(xiàn)隊(duì)列

到此這篇關(guān)于淺析Golang切片截取功能與C++的vector區(qū)別的文章就介紹到這了,更多相關(guān)Golang切片截取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Go 實(shí)現(xiàn)基于Token 的登錄流程深度分析

    Go 實(shí)現(xiàn)基于Token 的登錄流程深度分析

    Token 認(rèn)證機(jī)制的核心思想是,服務(wù)端在用戶登錄時(shí)生成一個(gè) Token,客戶端在后續(xù)的請(qǐng)求中攜帶這個(gè) Token,服務(wù)端通過(guò)驗(yàn)證 Token 的有效性來(lái)確認(rèn)用戶的身份,本文將帶你深入探索基于 Token 的登錄流程,這是一種更為靈活且適用于現(xiàn)代應(yīng)用架構(gòu)的認(rèn)證方式
    2024-03-03
  • go語(yǔ)言題解LeetCode506相對(duì)名次示例詳解

    go語(yǔ)言題解LeetCode506相對(duì)名次示例詳解

    這篇文章主要為大家介紹了go語(yǔ)言題解LeetCode506相對(duì)名次示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Linux系統(tǒng)下Go語(yǔ)言開(kāi)發(fā)環(huán)境搭建

    Linux系統(tǒng)下Go語(yǔ)言開(kāi)發(fā)環(huán)境搭建

    這篇文章主要介紹了Linux系統(tǒng)下Go開(kāi)發(fā)環(huán)境搭建,需要的朋友可以參考下
    2022-04-04
  • go build和go install的區(qū)別介紹

    go build和go install的區(qū)別介紹

    這篇文章主要介紹了go build和go install的區(qū)別介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang觀察者模式優(yōu)化訂單處理系統(tǒng)實(shí)例探究

    Golang觀察者模式優(yōu)化訂單處理系統(tǒng)實(shí)例探究

    當(dāng)涉及到訂單處理系統(tǒng)時(shí),觀察者設(shè)計(jì)模式可以用于實(shí)現(xiàn)訂單狀態(tài)的變化和通知,在這篇文章中,我們將介紹如何使用Golang來(lái)實(shí)現(xiàn)觀察者設(shè)計(jì)模式,并提供一個(gè)基于訂單處理系統(tǒng)的代碼示例
    2024-01-01
  • go reflect要不要傳指針原理詳解

    go reflect要不要傳指針原理詳解

    這篇文章主要為大家介紹了go reflect要不要傳指針原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go Java算法之二叉樹(shù)的所有路徑示例詳解

    Go Java算法之二叉樹(shù)的所有路徑示例詳解

    這篇文章主要為大家介紹了Go Java算法之二叉樹(shù)的所有路徑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang中接口對(duì)象的轉(zhuǎn)型兩種方式

    golang中接口對(duì)象的轉(zhuǎn)型兩種方式

    這篇文章主要介紹了golang中接口對(duì)象的轉(zhuǎn)型方式,大家都知道接口對(duì)象的轉(zhuǎn)型有兩種方式,文中通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • 最新評(píng)論

    德安县| 宁城县| 兰溪市| 房产| 安新县| 天台县| 株洲市| 陆川县| 桂阳县| 余干县| 渑池县| 凤台县| 天台县| 鄂伦春自治旗| 波密县| 从江县| 西峡县| 建德市| 霸州市| 兰州市| 合川市| 罗田县| 法库县| 平塘县| 九江县| 运城市| 连州市| 锦州市| 曲水县| 会同县| 临夏县| 沂源县| 基隆市| 怀宁县| 渝北区| 镇赉县| 陆丰市| 阿拉尔市| 吴忠市| 洪洞县| 济南市|