我對STL的一些看法(三)認識list容器

2021-06-19 15:05:26 字數 2792 閱讀 9895

是乙個線性鍊錶結構,它的資料由若干個節點構成,每乙個節點都包括乙個資訊塊(即實際儲存的資料)、乙個前驅指標和乙個後驅指標。它無需分配指定的記憶體大小且可以任意伸縮,這是因為它儲存在非連續的記憶體空間中,並且由指標將有序的元素鏈結起來。由於其結構的原因,list 隨機檢索的效能非常的不好,因為它不像vector 那樣直接找到元素的位址,而是要從頭乙個乙個的順序查詢,這樣目標元素越靠後,它的檢索時間就越長。檢索時間與目標元素的位置成正比。雖然隨機檢索的速度不夠快,但是它可以迅速地在任何節點進行插入和刪除操作。因為list 的每個節點儲存著它在鍊錶中的位置,插入或刪除乙個元素僅對最多三個元素有所影響,不像vector 會對操作點之後的所有元素的儲存位址都有所影響,這一點是vector 不可比擬的。

(1) 不使用連續的記憶體空間這樣可以隨意地進行動態操作;

(2) 可以在內部任何位置快速地插入或刪除,當然也可以在兩端進行push和pop 。

(3) 不能進行內部的隨機訪問,即不支援[ ] 操作符和vector.at() ;

lists將元素按順序儲存在鍊錶中,與向量(vectors)相比,它允許快速的插入和刪除,但是隨機訪問卻比較慢.

4.clear() 刪除所有元素

5.empty() 如果list是空的則返回true

6.end() 返回末尾的迭代器

7.erase() 刪除乙個元素

語法:

iterator erase( iterator loc );//刪除loc處的元素

iterator erase( iterator start, iterator end ); //刪除start和end之間的元素

8.front() 返回第乙個元素的引用

9.get_allocator() 返回list的配置器

10.insert() 插入乙個元素到list中

語法:

iterator insert( iterator loc, const type &val );

//在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器,

void insert( iterator loc, size_type num, const type &val );

//定位置loc前插入num個值為val的元素

void insert( iterator loc, input_iterator start, input_iterator end );

//在指定位置loc前插入區間[start, end)的所有元素

11.max_size() 返回list能容納的最大元素數量

12.merge() 合併兩個list

語法: 6

void merge( list &lst);//把自己和lst鍊錶連線在一起

void merge( list &lst, comp compfunction );

//指定compfunction,則將指定函式作為比較的依據。

13.pop_back() 刪除最後乙個元素

14.pop_front() 刪除第乙個元素

15.push_back() 在list的末尾新增乙個元素

16.push_front() 在list的頭部新增乙個元素

17.rbegin() 返回指向第乙個元素的逆向迭代器

18.remove() 從list刪除元素

語法:

void remove( const type &val );

//刪除鍊錶中所有值為val的元素

19.remove_if() 按指定條件刪除元素

20.rend() 指向list末尾的逆向迭代器

21.resize() 改變list的大小

語法:

void resize( size_type num, type val );

//把list的大小改變到num。被加入的多餘的元素都被賦值為val22.

22.reverse() 把list的元素倒轉

23.size() 返回list中的元素個數

24.sort() 給list排序

語法:

void sort();//為鍊錶排序,預設是公升序

void sort( comp compfunction );//採用指定函式compfunction來判定兩個元素的大小。

25.splice() 合併兩個list

語法:

void splice( iterator pos, list &lst );//把lst連線到pos的位置

void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到現鍊錶的pos上

void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定範圍。

26.swap() 交換兩個list

語法:

void swap( list &lst );// 交換lst和現煉表中的元素

27.unique() 刪除list中重複的元素

語法:

void unique();//刪除鍊錶中所有重複的元素

void unique( binpred pr );// 指定pr,則使用pr來判定是否刪除。

當然這個裡邊有很多函式都有需要注意的地方,比如:

#include

#include

using namespace std;

int  main()

你認為結果會是多少呢?

我對區塊鏈的一些看法

唐墨 1650727278 qq.com 同步資料定時定量同步,確保賬簿的一致性。以最長鏈作為主鏈,即每個節點總是選擇並嘗試延長主鏈。pow 確保整個區塊鏈的時序性。以太坊有專用pos的呼聲 一次交易中,pow勝出的一方獲得寫入區塊的許可權 同時獲得一定的激勵值,以確保區塊鏈在利益驅動型階段的秩序執...

我對web2 0的一些看法

我認為,web2.0實際上就是乙個虛擬圈子.在現實生活中,人們總是生活在乙個圈子中,而且都比較固定,這些主要有 親友圈同事圈 合作夥伴的圈子 而在虛擬世界裡,人們也主要形成了一些圈子 如 聊友圈,以im聊天形成的 論壇 部落格形成專業興趣圈.這些圈子的目的主要有學習,娛樂,交換觀點,相互串聯等作用....

對 XML 的一些看法

xml已經廣泛的應用在文件處理,資料儲存,web應用 例如ajax 的資料傳輸,模版的應用 等方面。作為一種結構化的語言,它克服了一般的標記語言標記固定的缺點,你可以定義自己的標記,按照自己的意願組織資料。你可以定義dtd跟xml schema來確保xml文件是符合要求的。可以用xslt把xml文件...