目录
一、list的构造
list<int> l1;//构造空的list
list<int> l2(4, 100);//构造的list中包含n个值为val的元素
list<int> 13(12.begin(), 12.end());//用12的[begin(),end())左闭右开的区间构造13
list < int> 14(13);//用13拷贝构造14
//以数组为迭代器区间构造15
int array[] = { 16,2,77,29 };
list < int> 15(array, array + sizeof(array) / sizeof(int));
//列表格式初始化
list < int> 16{1, 2, 3, 4, 5};
//用迭代器方式打印15中的元素
list<int>::iterator it = 15.begin();
while (it != 15.end())
{
cout << *it << " ";
++it;
}
cout << endl;
//C++11范围for的方式遍历
for (auto& e : 15)
{
cout << e << " ";
cout << endl;
}
二、迭代器的使用
//迭代器的使用
//遍历链表只能使用迭代器和范围for
void PrintList(const list<int> & l)
{
for (list<int>::const_iterator it = l.begin(); it != l.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
}
void TestList2()
{
int array[] = { 1,2,3,4,5,6,7,8,9,0 };
list<int> l(array, array + sizeof(array) / sizeof(array[0]));
//正向迭代器
auto it = l.begin();
while (it != l.end())
{
cout << *it << " ";
++it;
}
cout << endl;
//反向迭代器
auto rit = l.rbegin();
while (rit != l.rend())
{
cout << *rit << " ";
++rit;
}
cout << endl;
}
三、插入删除等修改操作
//list的插入和删除
void TestList3()
{
int array[] = { 1,2,3 };
list<int> L(array, array + sizeof(array) / sizeof(array[0]));
L.push_back(4);
L.push_front(0);
PrintList(L);
L.pop_back();
L.pop_front();
PrintList();
}
void TestList4()
{
int array[] = { 1,2,3 };
list<int> L(array1, array1 + sizeof(array1) / sizeof(array1[0]));
//获取链表中第2个节点
auto pos = ++L.begin();
cout << *pos << endl;
//在pos前面插入5个值为5的元素
L.insert(pos, 5, 5);
PrintList(L);
vector<int> v{ 7,8,9 };
L.insert(pos, v.begin(), v.end());
PrintList(L);
L.erase(pos);
PrintList();
L.erase(L.begin(), L.end());
PrintList(L);
}
四、resize/swap/clear
void TestList5()
{
//用数组构造list
int array[] = { 1,2,3 };
list<int> l1(array1, array1 + sizeof(array1) / sizeof(array1[0]));
PrintList(l1);
//交换l1和l2中的元素
list < int> 12;
l1.swap(l2);
PrintList(l1);
PrintList(l2);
//清空
12.clear();
cout << 12.size() << endl;
}
五、源代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<list>
#include<vector>
//list的构造
void TestList1()
{
list<int> l1;//构造空的list
list<int> l2(4, 100);//构造的list中包含n个值为val的元素
list<int> 13(12.begin(), 12.end());//用12的[begin(),end())左闭右开的区间构造13
list < int> 14(13);//用13拷贝构造14
//以数组为迭代器区间构造15
int array[] = { 16,2,77,29 };
list < int> 15(array, array + sizeof(array) / sizeof(int));
//列表格式初始化
list < int> 16{1, 2, 3, 4, 5};
//用迭代器方式打印15中的元素
list<int>::iterator it = 15.begin();
while (it != 15.end())
{
cout << *it << " ";
++it;
}
cout << endl;
//C++11范围for的方式遍历
for (auto& e : 15)
{
cout << e << " ";
cout << endl;
}
}
//迭代器的使用
//遍历链表只能使用迭代器和范围for
void PrintList(const list<int> & l)
{
for (list<int>::const_iterator it = l.begin(); it != l.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
}
void TestList2()
{
int array[] = { 1,2,3,4,5,6,7,8,9,0 };
list<int> l(array, array + sizeof(array) / sizeof(array[0]));
//正向迭代器
auto it = l.begin();
while (it != l.end())
{
cout << *it << " ";
++it;
}
cout << endl;
//反向迭代器
auto rit = l.rbegin();
while (rit != l.rend())
{
cout << *rit << " ";
++rit;
}
cout << endl;
}
//list的插入和删除
void TestList3()
{
int array[] = { 1,2,3 };
list<int> L(array, array + sizeof(array) / sizeof(array[0]));
L.push_back(4);
L.push_front(0);
PrintList(L);
L.pop_back();
L.pop_front();
PrintList();
}
void TestList4()
{
int array[] = { 1,2,3 };
list<int> L(array1, array1 + sizeof(array1) / sizeof(array1[0]));
//获取链表中第2个节点
auto pos = ++L.begin();
cout << *pos << endl;
//在pos前面插入5个值为5的元素
L.insert(pos, 5, 5);
PrintList(L);
vector<int> v{ 7,8,9 };
L.insert(pos, v.begin(), v.end());
PrintList(L);
L.erase(pos);
PrintList();
L.erase(L.begin(), L.end());
PrintList(L);
}
void TestList5()
{
//用数组构造list
int array[] = { 1,2,3 };
list<int> l1(array1, array1 + sizeof(array1) / sizeof(array1[0]));
PrintList(l1);
//交换l1和l2中的元素
list < int> 12;
l1.swap(l2);
PrintList(l1);
PrintList(l2);
//清空
12.clear();
cout << 12.size() << endl;
}