1. 程式人生 > >C++STL學習——List容器

C++STL學習——List容器

List容器

List簡介

  • list是一個雙向連結串列容器,可高效地進行插入刪除元素。
  • list不可以隨機存取元素,所以不支援at.(pos)函式與[]操作符。It++(ok) it+5(err)
  • 標頭檔案#include<list>

list物件的預設構造

list採用採用模板類實現,物件的預設構造形式:list lstT; 如:

list<int> lstInt;            //定義一個存放int的list容器。
list<float> lstFloat;     //定義一個存放float的list容器。
list<string> lstString; //定義一個存放string的list容器。 //尖括號內還可以設定指標型別或自定義型別。

list新增移除操作

list.push_back(elem); //在容器末尾加入一個元素
list.pop_back(); //刪除容器中最後一個元素
list.push_front(elem); //在容器開頭加入一個元素
list.pop_front(); //在容器開頭移除第一個元素

list的資料存取

list.front(); //返回第一個元素
list.back(); //返回最後一元素

list迭代器

list.begin
(); //返回容器中第一個元素的迭代器。 list.end(); //返回容器中最後一個元素之後的迭代器。 list.rbegin(); //返回容器中倒數第一個元素的迭代器。 list.rend(); //返回容器中倒數最後一個元素的後面的迭代器。

list的大小

list.size(); //返回容器中元素的個數
list.empty(); //判斷容器是否為空
list.resize(num); //重新指定容器的長度為num,若容器變長,則以預設值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。
list.resize(num,elem); //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。

list的插入

list.insert(pos,elem); //在pos位置插入一個elem元素的拷貝,返回新資料的位置。
list.insert(pos,n,elem); //在pos位置插入n個elem資料,無返回值。
list.insert(pos,beg,end); //在pos位置插入[beg,end)區間的資料,無返回值。

list的刪除

list.clear(); //移除容器所有元素
list.erase(beg,end); //刪除[beg,end)區間的資料,返回下一個資料的位置。
list.erase(pose); //刪除pos位置的資料,返回下一個資料的位置。
list.remove(elem); //刪除容器中所有與elem值匹配的元素。

list的反序排列

list.reverse(); //反轉連結串列,比如lst包含1,3,5元素,執行此方法後,lst就包含5,3,1元素。

程式碼演示

#include<iostream>
#include<list>
#include<iterator>
using namespace std;
int main()
{
	int a[5]={1,2,3,4,5};
	list<int> l(a,a+5);
	l.push_back(10); //向連結串列末尾新增元素10
	cout<<l.front()<<" "<<l.back()<<endl;
	l.pop_back(); //返回連結串列最後一個元素
	l.pop_front(); //返回連標第一個元素
	cout<<"l.size()="<<l.size()<<endl; //1 10
	for(list<int>::iterator it=l.begin();it!=l.end();it++)
	{
		cout<<*it<<" "; //2 3 4 5
	}
	cout<<endl;
	l.reverse();
	for(auto i=l.begin();i!=l.end();i++)
	{
		cout<<*i<<" "; //5 4 3 2
	}
	cout<<endl;
	return 0;
}