STL:List链表

链表是由一系列的结点组成,结点包含两个域,一个数据域,一个指针域。
链表内存是非连续的,添加和删除元素,时间复杂度都是常数项。
STL:List链表

  1. 在链表中插入元素,不需要移动元素。比数组添加删除效率高。
  2. 链表只有在需要的时候才分配内存。

一构造函数

list<int> lt;
list(beg, end);
list(n, elem);
list(const list & lt);

二.插入、删除

	list<int> lt;
	lt.push_back(elem);//在容器尾部加入一个元素
	lt.pop_back();//删除容器最后一个元素
	lt.push_front(elem);//在容器开头插入一个元素
	lt.pop_front();//删除容器开头第一个元素
	lt.insert(pos, elem);//在pos位置插入元素elem,返回新数据位置
	lt.insert(pos, n, elem);//在pos位置插入n个elem,无返回值
	lt.insert(pos, beg, end);//在pos位置插入[beg,end)区间的数据,无返回值
	lt.clear();//清除全部元素
	lt.erase(beg, end);//清除区间[beg,end)的数据,返回下一个数据位置
	lt.erase(pos);//删除pos位置数据,返回下一个数据位置
	lt.remove(elem);//删除容器中与elem值匹配元素

插入测试:

lt.push_back(2);
lt.push_front(1);
lt.insert(lt.begin(), 0);
lt.insert(lt.end(), 3);
list<int>::iterator it = lt.begin();
it++;
it++;
lt.insert(it, 4);//第二个位置插入
for (int v : lt) {
	cout << v << " ";
}

结果:
STL:List链表

三.大小操作

list<int> lt;
lt.size();//返回容器中元素个数
lt.empty();//判断容器是否为空
lt.resize(num);//重新指定容器长度为num,若容器变长,则以默认值填充新位置

四.数据存取

list<int> lt;
lt.front();//返回第一个元素
lt.back();//返回最后一个元素

五.赋值操作

list<int> lt,lt1;
int a[] = { 0,1,2,3 };
lt.assign(beg,end);//将[beg,end)区间中的数据拷贝赋值给本身
lt.assign(n, elem);//将n个elem拷贝给本身
list& operator=(const list & lt);//等号操作符重载
lt1.swap(lt);//将lt与本身元素互换

六.反转、排序

bool mycompare(int a,int b) {//排序规则
	return a > b;
}
//
list<int> lt;
lt.reverse();//反转链表,1,3,5反转5,3,1
lt.sort();//排序由小到大
lt.sort(mycompare);//排序:由大到小

测试:

bool mycompare(int a,int b) {//排序规则
	return a > b;
}
void test06() {
	list<int> lt;
	lt.push_back(1);
	lt.push_back(3);
	lt.push_back(2);
	for (int v : lt) {
		cout << v << " ";
	}
	cout << endl;
	lt.reverse();//反转链表,1,3,5反转5,3,1
	for (int v : lt) {
		cout << v << " ";
	}
	cout << endl;
	lt.sort();//排序:有小到大
	for (int v : lt) {
		cout << v << " ";
	}
	cout << endl;
	lt.sort(mycompare);//排序:由大到小
	for (int v : lt) {
		cout << v << " ";
	}
	cout << endl;
}

STL:List链表

上一篇:征集对Oracle的问题


下一篇:python作业6