本篇 ShengYu 將介紹 C++ std::list 用法與範例,C++ std::list 是一個 double linked list 實作的容器,C++ STL 另外有提供 single linked list 叫做 std::forward_list,list 和 vector 不同的是 list 不支援隨機存取的功能,list 的插入移除操作是常數時間,
以下 C++ list 用法與範例將分為這幾部分,
- list 常用功能
- list 初始化
- list 在尾部新增元素
- list 在頭部新增元素
- list for 迴圈遍歷
要使用 list 容器的話,需要引入的標頭檔:<list>
list 常用功能
以下為 std::list 內常用的成員函式,
修改器push_back
:把一個元素添加到尾端push_front
:把一個元素插入到頭端pop_back
:移除最後一個元素(尾端)pop_front
:移除第一個元素(頭端)insert
:插入元素erase
:移除某個位置元素, 也可以移除某一段範圍的元素clear
:清空容器裡所有元素
容量empty
:回傳是否為空size
:回傳目前長度
元素存取front
:取得頭部元素back
:取得尾部元素
迭代器begin
:回傳指向第一個元素(頭端)的迭代器cbegin
:回傳指向第一個元素(頭端)的迭代器(const)end
:回傳指向最後一個元素(尾端)的迭代器cend
:回傳指向最後一個元素(尾端)的迭代器(const)rbegin
:回傳指向最後一個元素(尾端)的反向迭代器crbegin
:回傳指向最後一個元素(尾端)的反向迭代器(const)rend
:回傳指向第一個元素(頭端)的反向迭代器crend
:回傳指向第一個元素(頭端)的反向迭代器(const)
list 初始化
C++ std::list 初始化的寫法如下,1
2
3
4
5
6
7
8
using namespace std;
int main() {
list<int> myList = {1, 2, 3};
return 0;
}
另外一種初始化 list 的方式是根據 C-Style 傳統陣列來 list 初始元素,1
2int array[] = {3, 2, 1};
std::list<int> myList(array, array+3);
如果要根據另一個 list 來初始 list 的方法有兩種,一種是使用 =
operator,另一種是使用 assign()
,使用 =
operator 的好處是簡單方便,使用 assign()
的好處是還可以指定要複製範圍,1
2
3
4
5std::list<int> myList1 = {1, 2, 3, 4, 5};
std::list<int> myList2;
myList2 = myList1;
// 或者用 assign()
myList2.assign(myList1.begin(), myList1.end());
要初始化 5 個 10 的話可以這樣寫,1
std::list<int> myList(5, 10);
list 在尾部新增元素
在 list 尾部新增元素的寫法如下,1
2std::list<int> myList = {1, 2, 3};
myList.push_back(4);
list 在頭部新增元素
在 list 頭部新增元素的寫法如下,1
2std::list<int> myList = {1, 2, 3};
myList.push_front(0);
list for 迴圈遍歷
for 迴圈遍歷 list 的方式有幾種,
首先介紹用 range-based for loop 遍歷 list 並且把元素印出來,寫法如下,1
2
3
4
5std::list<int> myList = {1, 2, 3};
for (int n : myList) {
std::cout << n << ", ";
}
std::cout << "\n";
使用 for 迴圈搭配迭代器 iterator,寫法如下,1
2
3
4
5
6// for (auto it = myList.begin(); it != myList.end(); it++) {
// or
for (std::list<int>::iterator it = myList.begin(); it != myList.end(); it++) {
std::cout << *it << ", ";
}
std::cout << "\n";
上述是正向迭代器的範例,輸出結果會從 list 頭部印到尾部,
如果要倒過來印,從 list 尾部印到頭部的話,可以使用反向迭代器 reverse_iterator,1
2
3
4
5
6// for (auto it = myList.rbegin(); it != myList.rend(); it++) {
// or
for (std::list<int>::reverse_iterator it = myList.rbegin(); it != myList.rend(); it++) {
std::cout << *it << ", ";
}
std::cout << "\n";
參考
[1] std::list - cppreference.com
https://en.cppreference.com/w/cpp/container/list
[2] list - C++ Reference
http://www.cplusplus.com/reference/list/list/
其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
std::vector 用法與範例
std::deque 用法與範例
std::queue 用法與範例
std::stack 用法與範例
std::set 用法與範例
std::map 用法與範例
std::unordered_map 用法與範例