C++ list (tcy)

tcy23456發表於2020-11-28
1.1.說明:
	std::list是順序容器是雙向連結串列;提供雙向迭代功能,但空間效率較低
	雙向連結串列元素都有一指標指向後一元素,也有一指標指向前一個元素

	支援從容器中任何位置插入和刪除元素。不支援快速隨機訪問。

	新增,刪除和移動列表中或多個列表中的元素不會使迭代器或引用無效。
	僅當刪除相應的元素時,迭代器才無效。

1.2.注意:
	不支援使用下標隨機存取元素

1.3.函式:

函式例項說明
建構函式  
operator=  
assign(lst.begin(),lst.end()) 分配
get_allocator 返回關聯的分配器
Element access元素訪問  
const int &front()constlst.front();返回陣列首元素值
back()lst.back();訪問最後一個元素
Iterators迭代器  
begincbegin 將迭代器返回到開頭
endcend 將迭代器返回到末尾
rbegincrbegin 將反向迭代器返回到開頭
rendcrend 將反向迭代器返回到末尾
Capacity容量  
bool empty() const; 檢查容器是否為空
size_t  lst.size() const; 返回元素數
size_t max_size() 返回最大可能的元素數
void resize(size_t newsize) 更改儲存的元素數 =size()
操作  
void unique() 刪除連續的重複元素
void remove(value) 刪除指定值,不存在忽略
remove_if() 刪除滿足特定條件的元素
iterator erase(iterator position); 刪除迭代器所指元素;返回下一個元素的迭代器
void pop_front() 刪除第一個元素
void pop_back() 刪除最後一個元素
erase(std::list)  
erase_if(std::list) 擦除所有滿足特定條件的元素
clear() 清除容器全部內容
   
void push_front(const &T Val) 元素插入頭部;
void push_back(const &T Val) 在末尾新增一個元素
iter insert(iter pos, const &T val);lst.insert(lst.begin()+2,0);在迭代器所指向元素前插入val
void splice(iterator i, list <T> & x, iterator first, iterator last) 在位置i前插入 x [first, last),x刪除該區間。連結串列可是同一連結串列且i 不在 [first, last)
void merge(list <T> & x) 合併x到尾部並清空 x。要求二個都是有序
emplace(T value) 就地構造元素
emplace_front() 在開始處就位構造一個元素
emplace_back() 在末尾就位構造一個元素
Operations運作方式  
void sort() 對元素進行排序
void reverse() 反轉元素的順序
swap(std::list) 交換內容

 

2.例項

	#include <iostream>
	#include <list>
	#include <assert.h>

	using namespace std;

	#define print_list(lst)  \
	{   cout << "[";         \
		for (auto v:lst)     \
			cout << v << ",";\
		cout << "]" << endl; \
	}
int main() {
		//建構函式:
		int arr[6] = { 1,3,2,5,2,3 };
		int arr1[5] = {1,3,2,4,6 };

		list<int> lst(arr, arr + 6);
		list<int> lst1(arr1, arr1 + 5);
		list<int> lst2{ 10,13,14 };
		list<int> lst3 = lst2,lst4;
		lst4.assign(lst2.begin(), lst2.end());

		list<int>::iterator it;//it++;合法 it+1;不合法

		//獲取元素:
		cout << lst.front() <<"="<< *lst.begin() << endl;//1 1首元素
		cout << lst.back()  << endl;//3 尾元素
		
		cout << lst.size() <<","<<lst.max_size()<< endl;//6,768614336404564650
		lst.resize(8);
		cout << lst.size() << "," << lst.max_size() << endl;//10, 768614336404564650

		assert(lst.empty() == false);

		//刪除:
		lst.sort();
		lst.unique(); print_list(lst);//刪除相鄰重複元素
		
		lst.pop_front(); print_list(lst);//刪除首元素
		lst.remove(5); print_list(lst);//刪除元素5,若不存在忽略

		//排序:
		lst.sort(); print_list(lst);   
		lst.reverse(); print_list(lst);//反序
		
		//使用merge
		lst.sort(); lst1.sort();
		lst.merge(lst1); print_list(lst); print_list(lst1);//lst=slt+lst1 lst1=空
		
		//附加:
		print_list(lst4); print_list(lst2);
		for(auto it=lst2.begin();it!=lst2.end();it++)//lst4=lst4+lst2;lst2不變
			lst4.push_back(*it);

		print_list(lst4); print_list(lst2);

		//遍歷元素:
		for (auto it = lst.begin(); it != lst.end(); ++it) {
			cout << *it << "," << endl;
		}
		
		return 0;
	}

 

 

 

 

相關文章