新企業(yè)在哪里做網(wǎng)站好關鍵詞推廣優(yōu)化排名品牌
C++標準模板庫(STL)中的list是一個雙向鏈表,它提供了高效的插入、刪除和反轉(zhuǎn)操作。list支持隨機訪問,這意味著我們可以直接訪問任何元素,而不需要從頭開始遍歷鏈表。此外,list還支持反向迭代,即可以從尾部開始迭代。
list基本操作
- push_back():在尾部添加一個元素。
myList.push_back(1); // myList: 1
myList.push_back(2); // myList: 1, 2
myList.push_back(3); // myList: 1, 2, 3
- push_front():在頭部添加一個元素。
myList.push_front(0); // myList: 0, 1, 2, 3
- pop_back():刪除最后一個元素。
myList.
pop_back(); // myList: 0, 1, 2
- pop_front():刪除第一個元素。
myList.pop_front(); // myList: 1, 2
- insert(pos, n, elem):在pos位置插入n個elem數(shù)據(jù)。例如,在位置1插入2個值為3的元素。
myList.insert(myList.begin() + 1, 2, 3); // myList: 0, 3, 3, 1, 2
- erase(pos):刪除pos位置的數(shù)據(jù),返回下一個數(shù)據(jù)的位置。例如,刪除位置1的數(shù)據(jù)并返回下一個位置。
list<int>::iterator it = myList.erase(myList.begin() + 1); // myList: 0, 1, 2
- remove(elem):刪除容器中所有與elem值匹配的元素。例如,刪除所有值為1的元素。
myList.remove(1); // myList: 0, 2
- size():返回容器中元素的個數(shù)。例如,返回myList中元素的個數(shù)。
int size = myList.size(); // size: 2
list特性
list是一個雙向鏈表,其特性包括:
- 可以在常數(shù)時間內(nèi)進行任意位置的插入和刪除操作。
- 可以前后雙向迭代。
- 底層是雙向鏈表結(jié)構,每個元素存儲在互不相關的獨立節(jié)點中,節(jié)點中通過指針指向其前一個元素和后一個元素。
相比vector,list在任意位置插入、移除元素的執(zhí)行效率通常更好。然而,list不支持任意位置的隨機訪問,要訪問list的特定位置元素,需要從已知的位置(如頭部或尾部)開始迭代到該位置,這個過程需要線性時間開銷。此外,list還需要一些額外的空間來保存每個節(jié)點的相關信息。
應用舉例
#include <iostream>
#include <list>int main() {std::list<int> myList;// 添加元素到鏈表myList.push_back(1);myList.push_back(2);myList.push_back(3);// 使用迭代器遍歷鏈表for (std::list<int>::iterator it = myList.begin(); it != myList.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;// 從鏈表中刪除元素myList.pop_front();myList.pop_back();// 使用反向迭代器遍歷鏈表for (std::list<int>::reverse_iterator it = myList.rbegin(); it != myList.rend(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}
輸出:
1 2 3
2 3