STL——list容器

其实也就是链表,通过指针来连接起来

构造函数

list<T> list //list采用模板

list(beg,end) //构造函数将【beg,end)区间中的元素拷贝给自己

list(n,elem) //将n个elem拷贝给本身

list(const list &lst); //拷贝构造函数

void PrintList(list<int>& L1)
{
for (list<int>::const_iterator begin=L1.begin(); begin!=L1.end(); begin++)
{
printf("%d\n",*begin);
}
}
void test01()
{
list<int> List_test1;
List_test1.push_back(1);
List_test1.push_back(2);
List_test1.push_back(3);
List_test1.push_back(4);
PrintList(List_test1);

list<int> List_test2(List_test1.begin(),List_test1.end());
PrintList(List_test2);

list<int> List_test3(5, 10);
PrintList(List_test3);

list<int> List_test4(List_test3);
PrintList(List_test4);
}

 

 

赋值和交换

assign(beg,end) //将[end,beg)数据拷贝赋值给本身

assign(n,elem)

list *operator=(const list&lst);

swap(lst)

void test02()
{
list<int> L1;
L1.push_back(1);
L1.push_back(1);
L1.push_back(1);
L1.push_back(1);

//等号赋值
list<int> L2 = L1;

//区域赋值
list<int> L3;
L3.assign(L2.begin()++, L2.end());

//多量重复数赋值
L3.assign(5, 10);

//交换
PrintList(L1);
L1.swap(L3);
PrintList(L1);

}

 

大小操作函数

size()
empty()
resize(num) //重新指定长度,如果变长用null来填充,如果变短就删除超出范围的list

 

 

插入和删除

  • push_back(elem);//在容器尾部加入一个元素

  • pop_back();//删除容器中最后一个元素

  • push_front(elem);//在容器开头插入一个元素

  • pop_front();//从容器开头移除第一个元素

  • insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置。

  • insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。

  • insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。

  • clear();//移除容器的所有数据

  • erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。

  • erase(pos);//删除pos位置的数据,返回下一个数据的位置。

  • remove(elem);//删除容器中所有与elem值匹配的元素。

     

数据存储

迭代器不支持随机访问,只支持++和--

front(); //返回第一个元素。

back(); //返回最后一个元素。

反转和排序

  • reverse(); //反转链表

  • sort(); //链表排序

  • void test03()
    {
    list<int> L1;
    L1.push_back(1);
    L1.push_back(2);
    L1.push_back(5);
    L1.push_back(4);
    L1.push_back(3);
    PrintList(L1);
    L1.reverse();
    PrintList(L1);
    printf("\n");

    PrintList(L1);
    L1.sort();
    PrintList(L1);


    }
  •