STL list的簡單用法和實現

2021-08-13 17:38:15 字數 2397 閱讀 5542

list是由資料結構中的雙向鍊錶實現的可以高效地支援任意地方的刪除和插入;記憶體空間可以是不連續的,只能通過指標來進行資料的訪問,使得它的隨機訪問變的非常沒有效率。

使用c++標準庫裡面的list時需加標頭檔案#include,且是屬於std域,所以還應加上using namespace std.

list的部分函式操作:

begin()

返回容器中第乙個元素的迭代器,和front()不同,begin()返回的只是乙個指向第乙個元素的雙向迭代器而已,如果容器為空返回的迭代器是無效的。

end()返回指向鍊錶最後乙個元素之後的迭代器

rbegin()返回逆向鍊錶的第乙個元素,即鍊錶的最後乙個資料

rend() 返回逆向鍊錶的最後乙個元素的下乙個位置,即鍊錶的第乙個資料再往前的位

front() 返回鍊錶的第乙個元素

back() 返回鍊錶的最後乙個元素

empty()判斷鍊錶是否為空

size() 返回鍊錶中實際元素的個數

max_size() 返回鍊錶可能容納的最大元素數量

clear() 清除鍊錶中的所有元素

insert(pos,num) 在pos位置插入元素num

erase(pos)刪除pos位置的元素

push_back(num)在末尾增加乙個元素

pop_back() 刪除末尾的元素

push_front(num) 在開始位置增加乙個元素

pop_front()刪除第乙個元素

resize(n) 從新定義鍊錶的長度,超出原始長度部分用0代替,小於原始部分刪除

改變容器的大小,使得它能容納n個元素

如果引數中的n,比當前容器的大小小,元素將會減少到這個容器的前n個,刪除剩下的(resize函式會負責釋放空間)

如果引數中的n,比當前容器的大小大,容器通過在尾部增加元素,使其達到n這個大小,如果val指定了引數,新的元素會被初始化為val。

operator==

operator!=

list的迭代器遍歷方法:

while (it != l.end())

cout << endl;

list的簡單實現:

#include

#include

#include

using namespace std;

//節點結構類

template

struct listnode

};//迭代器類

template

struct listiterator

ref operator*()

ptr operator->()

self

& operator++()

self operator++(int)

self

& operator--()

self operator--(int)

bool operator != (const self

& t)

bool operator == (const self

& t)

node* _node;

};//list類(有頭雙向鍊錶)

template

class list

iterator begin()

constiterator begin() const

iterator end()

constiterator end() const

void pushback(const t& x)

void popback()

else

node* tail = cur;

cur->_next =

null;

tail->_next = _head;

_head->_prev = tail;}}

void pushfront(const t& x)

else

}void popfront()

else

}void insert(iterator pos, const t& x)

iterator erase(iterator& pos)

private:

node* _head;

};void print(const list

& l)

cout << endl;

}int main()

mysql的簡單用法 mysql簡單用法

刪除使用者 drop user jack drop比delete刪除的優勢在於drop可以刪除使用者的許可權,更加徹底 更改使用者名稱 rename user jack to jacknew 使用者的都存在與user表中,更改名稱,許可權不變 更改使用者密碼 update mysql.user se...

解壓和壓縮的簡單用法

tar在linux上是常用的打包 壓縮 加壓縮工具,他的引數很多,折里僅僅列舉常用的壓縮與解壓縮引數 引數 c create 建立壓縮檔案的引數 x 解壓縮壓縮檔案的引數 z 是否需用用gzip壓縮 v 壓縮的過程中顯示檔案 f 置頂文件名,在f後面立即接檔名,不能再加引數 舉例 一,將整個 hom...

ipcs和ipcrm 簡單用法

ipcs和 ipcrm 用法簡介 命令名稱 ipcs 使用許可權 所有使用者 使用方式 ipcs m q s m 輸出有關共享記憶體 shared memory 的資訊 q 輸出有關資訊佇列 message queue 的資訊 s 輸出有關 遮斷器 semaphore 的資訊 命令名稱 ipcrm ...