C++ list (tcy)

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;
	}

 

 

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页