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

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

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

淺析golang切片截?。▌h除)功能

1. 引言

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

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

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

2.分析過程

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

可以利用s[1:]的方式來刪除切片的第一個(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ù)端通過驗(yàn)證 Token 的有效性來確認(rèn)用戶的身份,本文將帶你深入探索基于 Token 的登錄流程,這是一種更為靈活且適用于現(xiàn)代應(yīng)用架構(gòu)的認(rèn)證方式
    2024-03-03
  • go語言題解LeetCode506相對(duì)名次示例詳解

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

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

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

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

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

    這篇文章主要介紹了go build和go install的區(qū)別介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    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來實(shí)現(xiàn)觀察者設(shè)計(jì)模式,并提供一個(gè)基于訂單處理系統(tǒng)的代碼示例
    2024-01-01
  • go reflect要不要傳指針原理詳解

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

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

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

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

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

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

    邵阳市| 天门市| 吉水县| 齐河县| 东莞市| 扎囊县| 桐梓县| 罗源县| 崇仁县| 准格尔旗| 阿巴嘎旗| 迭部县| 清河县| 信宜市| 木兰县| 墨竹工卡县| 仁寿县| 嵊州市| 子长县| 松阳县| 色达县| 临西县| 瑞昌市| 毕节市| 南投市| 汶川县| 五原县| 阳朔县| 高唐县| 青川县| 泾源县| 长白| 盐城市| 元阳县| 嘉荫县| 江陵县| 阿拉善盟| 广德县| 嫩江县| 海林市| 多伦县|