目录
[(一)push_back(const value_type& val)和push_front(const value_type& val)](#(一)push_back(const value_type& val)和push_front(const value_type& val))
[(二)resize(size_type n, value_type val = value_type())](#(二)resize(size_type n, value_type val = value_type()))
一、list的底层结构
双向带头循环链表


二、list的构造函数

cpp
list<int> lt1; //default (1)
list<int> lt2(10, 1); //fill (2)
vector<int> v1 = { 1,2,3,4,5 };
list<int> lt3(v1.begin(), v1.end()); //range (3)
list<int> lt4(lt1); //copy (4)
cpp
list<int> lt5 = { 1,2,3,4,5,6,1,1,1,1 }; //list也可以像vector<int> v1 = { 1,2,3,4,5 };一样初始化
int a[] = { 1,20,3,40 };
list<int> lt6(a, a + 4);
sort(a, a + 4);
三、迭代器
封装,通用的相似的遍历容器的方式,并且封装屏蔽容器结构的差异和底层的细节
通用/复用,实现算法时用迭代器函数模板方式实现,和底层容器结构解耦
cpp
list<int>::iterator it5 = lt5.begin();
while (it5 != lt5.end())
{
cout << *it5 << " ";
++it5;
}
cout << endl;
for (auto e : lt5)
{
cout << e << " ";
}
cout << endl;
sort(a, a + 4);
sort(v1.begin(), v1.begin());
//sort(lt3.begin(), lt3.end()); //不能用,要求是随机迭代器
reverse(v1.begin(), v1.end());
reverse(lt3.begin(), lt3.end());
四、list的公有成员函数
(一)push_back(const value_type& val)和push_front(const value_type& val)


cpp
list<int> lt1(10, 1);
lt1.push_back(10);
lt1.push_front(10);
for (auto e : lt1)
{
cout << e << " ";
}
cout << endl;

(二)resize(size_type n, value_type val = value_type())

①size变大
会将无值部分赋值为指定值或者默认值
cpp
lt1.resize(20, 2);
for (auto e : lt1)
{
cout << e << " ";
}
cout << endl;

②size变小
会将多余值去掉

(三)merge (list& x)
合并规则:默认用小于号<比较元素,要求this和x两个链表本身都已经按升序排好序,合并后当前链表依旧保持升序有序。

cpp
std::list<double> first, second;
first.push_back(3.1);
first.push_back(2.2);
first.push_back(2.9);
second.push_back(3.7);
second.push_back(7.1);
second.push_back(1.4);
first.sort();
second.sort();
first.merge(second);
for (auto e : first)
{
cout << e << " ";
}
cout << endl;

四、remove (const value_type& val)
删除容器中所有值等于 val 的元素。

cpp
std::list<double> lt1 = { 1,2,3,4,5,6,2,3,2 };
lt1.remove(2);
for (auto e : lt1)
{
cout << e << " ";
}
cout << endl;
