1. 程式人生 > >C++ STL 容器部分有關list 連結串列容器的基本操作

C++ STL 容器部分有關list 連結串列容器的基本操作

#include<iostream>

using namespace std;
#include "list"   //list模型的標頭檔案

/*總結*/

//相當於一個雙向連結串列
//1 list基本與其餘容器模型差不多類似  注意一點就是不允許隨機插入
//2 區間刪除  注意!  如果是l1.erase(0,3);  就會刪除 位置 0 1 2 但是位置3不會被刪除  這就是一個左閉右開區間 【 )(這裡0 3 代表迭代器的位置 )
//3  與其餘容器相同也可以放置類物件,或者指標
//4 有一個remove函式比較特殊  表示刪除連結串列中相同的元素
//5  連結串列的結點index序號是從0號位置開始的  ,例如在3號位置插入,則原來的三號位置會變成4號位置 4號變成5號位置
//list 連結串列模型的基本操作


void main71()
{
	list<int> l1;

	cout << "list的長度:" << l1.size() << endl;

	for (int i = 0; i < 10; i++)
	{
		l1.push_back(i);  //list的尾插法
	}
	list<int>::iterator it = l1.begin();  //有關迭代器的操作
	cout << "列印輸出:";
	while (it != l1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;
	cout << "list的長度:" << l1.size() << endl;


	//list不允許隨機訪問

	it = l1.begin();   //重新定義迭代器
	it++;
	//it = it + 2;  //這裡會報錯,說明問題


	it = l1.begin();   //重新定義迭代器  此時it指向0號位置
	it++;   //將迭代器向後加一,指向1號位置
	it++;   //此時應該指向2號位置
	l1.insert(it, 100);  //代表在it位置處插入元素100 並且原it位置元素後移一位

	cout << "列印插入後的連結串列:" ;

	list<int>::iterator it1 = l1.begin();  //有關迭代器的操作
	while (it1 != l1.end())
	{
		cout << *it1 << " ";
		it1++;
	}

}

//list連結串列的刪除操作
void main72()
{
	list<int> l1;

	cout << "list的長度:" << l1.size() << endl;

	for (int i = 0; i < 10; i++)
	{
		l1.push_back(i);  //list的尾插法
	}
	list<int>::iterator it = l1.begin();  //有關迭代器的操作
	list<int>::iterator it1 = l1.begin();  //有關迭代器的操作
	cout << "列印輸出:";
	while (it != l1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

	//區間刪除  注意!  如果是l1.erase(0,3);  就會刪除 位置 0 1 2 但是位置3不會被刪除  這就是一個左閉右開區間 【 )(這裡0 3 代表迭代器的位置 )
	it = l1.begin();  //指向位置0
	it1++;
	it1++;
	it1++;  //移向位置3出 0 1 2 3
	l1.erase(it, it1);

	cout << "列印輸出刪除之後1:";
	it = l1.begin();

	while (it != l1.end())
	{
		cout << *it << " ";
		it++;
	}


	//指定位置刪除

	l1.erase(l1.begin());     //刪除連結串列首個元素


	cout << endl;
	cout << "列印輸出刪除之後2:";
	it = l1.begin();

	while (it != l1.end())
	{
		cout << *it << " ";
		it++;
	}

	//指定元素刪除 例如刪除所有的3
	l1.insert( l1.begin(),3);
	l1.insert(l1.begin(), 3);
	l1.insert(l1.begin(), 3);
	cout << endl;
	cout << "連結串列的初始化:";
	it = l1.begin();

	while (it != l1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

	l1.remove(3);   //將連結串列中的元素3都刪除

	cout << "指定元素刪除之後:";
	it = l1.begin();

	while (it != l1.end())
	{
		cout << *it << " ";
		it++;
	}

	


}

int main()
{
	//main71();    //list的基本操作
	main72();//list連結串列的刪除操作
	system("pause");
	return 0;
}