list
- 非连续的线性空间分配,每次插入或者删除一个元素就会配置或者释放一个元素的空间。所以,每次元素的插入或者删除都是常数时间。
- 是一个双向链表。并且插入和接合操作都不会造成迭代器的失效。
初始化
list<int> a1 = { 1,2,3,4,5,6,7 };
list<int> b(3, 5);//初始化3个5
list<int> c(a1);//用a来初始化c
list<int> a{ 2,2,3,4,5,6,7 };
插入与删除
list<int> a = { 1,2,3,4,5,6,7,5 };
a.push_front(0);//头插
a.push_back(8);//尾插
/*指定位置插入,在查找到6这个元素后,进行insert插入,在6之前插入2个元素777*/
list<int>::iterator iter = find(a.begin(), a.end(), 6);
a.insert(iter , 2, 777);
a.remove(5);//指定删除元素,如果有重复的5,全部删除
a.pop_back();//尾删
a.pop_front();//头删
常用算法
bool match(int x)
{
return x > 3;
}
int main()
{
list<int> a = {2,3,4,5,6,7,5 };
list<int> b = { 2,3,4,5 };
swap(a, b);//交换ab链表的值
reverse(a.begin(), a.end());//链表反转
a.merge(b, greater<int>());//将b中的元素拼接到a后面,并且清空b中的元素
a.resize(10);//调整a的size,如果小于原来的size就截取,大于原来的size补0
bool isempty = a.empty();//判断a是否为空
a.remove_if(match);//通过函数调用,如果>3,那么删除a中的元素
for (auto& i : a)
{
cout << i << endl;
}
return 0;
}