C++基本序列式容器效率比较
前面介紹序列式的三種容器時(shí),我們簡(jiǎn)單介紹了在容器各部位插入或刪除元素時(shí)的處理效率,在此節(jié)我們做一個(gè)總結(jié)。
根據(jù) STL 公布的容器各種操作效率,我們可以根據(jù)不同的需求來(lái)選擇合適的容器。例如,我們需要頻繁的在容器的任意位置插入或刪除元素,則我們可以選擇 list,而非 vector 和 deque。具體的總結(jié)見(jiàn)下表。
| 在容器頭部插入或刪除元素 | 線性 | 恒定 | 恒定 |
| 在容器尾部插入或刪除元素 | 恒定 | 恒定 | 恒定 |
| 在容器中部插入或刪除元素 | 線性 | 線性 | 恒定 |
| 訪問(wèn)容器頭部的元素 | 恒定 | 恒定 | 恒定 |
| 訪問(wèn)容器尾部的元素 | 恒定 | 恒定 | 恒定 |
| 訪問(wèn)容器中部的元素 | 恒定 | 恒定 | 線性 |
對(duì)于 vector 而言,它只是一個(gè)可以伸縮長(zhǎng)度的數(shù)組,因此除了在尾部插入、刪除數(shù)據(jù)外,在其它任何部位插入、刪除數(shù)據(jù)都是線性的復(fù)雜度,容器長(zhǎng)度越大,完成相應(yīng)的操作也就越多。而訪問(wèn)元素則可以根據(jù)下標(biāo)直接訪問(wèn)到,因此訪問(wèn)任何位置的元素,其效率都是恒定的。
對(duì)于 deque 而言,它是一個(gè)可以操作頭部和尾部的并且可以伸縮長(zhǎng)度的數(shù)組,因此它在頭部和尾部插入、刪除數(shù)據(jù),效率是恒定的,但是在容器的中間插入元素,則它跟 vector 一樣,同樣是要移動(dòng)其它元素的,因此在中部插入或刪除元素效率是線性的。對(duì)于訪問(wèn)容器中的元素,它同樣可以通過(guò)下標(biāo)進(jìn)行直接訪問(wèn),因此效率也是恒定的。
對(duì)于 list 而言,它是一個(gè)雙向鏈表,因此在任何位置插入或刪除元素都不用移動(dòng)其它元素,其效率始終是恒定的。對(duì)于訪問(wèn)元素,雙向鏈表訪問(wèn)頭尾元素都很方便,但是訪問(wèn)中間元素則需要逐一從頭部或尾部一一遍歷過(guò)去,因此訪問(wèn)容器中間的元素其效率是線性的。
在今后的程序設(shè)計(jì)過(guò)程中,如果需要使用容易,應(yīng)該按照需求選擇合適的容器,否則會(huì)大大降低程序的效率。如果我們只需要在容器尾部插入刪除元素,則 vector 就夠用了,如果還需要在頭部也頻繁的插入刪除元素,則需要選擇 deque。
總結(jié)
以上是生活随笔為你收集整理的C++基本序列式容器效率比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ 中的集合与字典
- 下一篇: ubuntu opencv c++ 读取