標準模板庫STL之list
阿新 • • 發佈:2019-01-12
一、list:封裝連結串列相關功能
函式功能 |
功能 |
push_back |
在尾部新增一個結點 |
pop_back |
在尾部刪除一個結點 |
push_front |
在頭部新增一個結點 |
pop_front |
在頭部刪除一個結點 |
clear |
清空所有結點 |
back |
返回尾結點 |
front |
返回頭結點 |
size |
返回結點的個數 |
insert |
在中間插入結點 |
erase |
刪除中間結點 |
二、例項
#include<stdio.h> #include<list>//標頭檔案 using namespace std;//名稱空間 int main(){ list<int> lst;//宣告 lst.push_back(1);//在尾部插入一個結點 lst.push_back(2);//在尾部插入一個結點 lst.push_front(3); //在頭部插入一個結點 lst.pop_back();//在尾部刪除一個結點 return 0; }
三、連結串列不能隨機訪問,只能按順序鏈式訪問,所以,只能使用迭代器iterator遍歷
#include<stdio.h> #include<list>//標頭檔案 using namespace std;//名稱空間 int main(){ list<int> lst;//宣告 lst.push_back(1);//在尾部插入一個結點 lst.push_back(2);//在尾部插入一個結點 lst.push_front(3); //在頭部插入一個結點 lst.pop_back();//在尾部刪除一個結點 //迭代器遍歷 list<int>::iterator iter; for(iter=lst.begin();iter!=lst.end();iter++){ int& value=*iter; printf("%d ",value); } return 0; }
四、list比vector更適合插入刪除操作
list連結串列中插入/刪除一個節點
(1)遍歷list,找到目標位置
(2)呼叫insert/erase,插入/刪除一個節點
#include<stdio.h>
#include<list>
using namespace std;
int main(){
list<int> lst;//宣告
lst.push_back(1);
lst.push_back(3);
lst.push_back(5);
lst.push_back(7);
lst.push_back(9);
//刪除值為3的節點
list<int>::iterator iter;
for(iter=lst.begin();iter!=lst.end();iter++){
int& value=*iter;
if(value==5){
lst.erase(iter);//迭代器指向這個節點
break;
}
printf("%d ",value);//1 3
}
return 0;
}
五、重要性
vector可有可無,但lsi必不可少。
vector不常用到,使用普通的陣列完全沒有問題。list經常用到,如果沒有list,那麼每個連結串列都需要從頭寫起,十分麻煩。