1. 程式人生 > >標準模板庫STL之list

標準模板庫STL之list

一、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,那麼每個連結串列都需要從頭寫起,十分麻煩。