STL中list各个接口的使用

来源:互联网 发布:8月金融数据 编辑:程序博客网 时间:2024/06/03 14:58

list是STL中的一个重要的容器,它是一个双向的循环的带头结点的链表,可以高效的进行插入删除元素。

 这里来看一下他的接口们

这是C++网上的一张list的构造和方法的图↑

1.Construct list构造成员函数

void constructtest()                         //Construct list 构造函数;{   list<int> l1;     //empty container constructor (default constructor)  构造空的链表;list<int>l2(3);                      //不完整参数的构造,构造三个默认为零元素的列表;list<int>l3(4,10);                   //fill constructor,   构造n个value,  4个10;list<int>l4(l3);                     // copy constructor  拷贝构造;list<int>l5(l3.begin(), l3.end());   //range constructor, 迭代器区间构造;PrintList(l1);PrintList(l2);PrintList(l3);PrintList(l4);}


2.析构函数

List destructor;

Destroys the container object.   ~list用来清理销毁达到生命周期该释放的链表。

3.list& operator= (const list& x);等号操作符的重载。      

4.list中迭代器生成器

void Iteratortest(list<int>&l){list<int>::iterator it1 = l.begin();                        //生成一个开始位置的迭代器,head->next,可以修改list内容list<int>::iterator it2 = l.end();                          //生成一个结束位置的迭代器,head,可以修改list内容list<int>::reverse_iterator it3 = l.rbegin();               //生成一个反向的开始位置的迭代器,head->prev,可以修改list内容list<int>::reverse_iterator it4 = l.rend();                 //生成一个反向的结束位置的迭代器,head,也可以修改list内容list<int>::const_iterator cit1 = l.cbegin();                //生成一个const修饰的开始位置的迭代器,const修饰不可解引用修改list内容 (c++11)list<int>::const_iterator cit2 = l.cend();                  //生成一个const修饰的结束位置的迭代器; (c++11)list<int>::const_reverse_iterator cit3 = l.crbegin();       //生成一个const修饰的反向的开始位置的迭代器;(c++11)list<int>::const_reverse_iterator cit4 = l.crend();         //生成一个const修饰的反向的结束位置的迭代器;(c++11)}

5.Capacity 关于容量的一些方法;

void capacitytest(list<int>&l){cout << l.empty() << endl;   //判断空不空cout << l.size() << endl;       //返回元素个数cout << l.max_size() << endl; //返回最大元素个数l.resize(3);            //resize()重新定义链表长度PrintList(l);l.resize(5, 8);         //resize()重新定义链表长度为5并写入5个8PrintList(l);}


6.Modifiers:关于修改链表内容的方法:

void modifierstest(){listl1(4, 10);listl2(10, 8);cout << "l1  :"; PrintList(l1);cout << "l2:"; PrintList(l2);cout << "assign test" << endl;l2.assign(++l1.begin(), --l1.end());             //void assign ( InputIterator first, InputIterator last );参数直接给成迭代器类型的,赋值的是一段区间 。l1.assign(7, 4);                             //void assign ( size_type n, const T& u );参数给n个val。cout << "l1  :"; PrintList(l1);cout << "l2:"; PrintList(l2);cout << "push and pop test" << endl;l1.push_back(11);    //void push_back ( const T& x );尾插元素l1.push_back(22);l1.push_front(2);     //void push_front ( const T& x );前插元素l1.push_front(1);cout << "l1  :"; PrintList(l1);l1.pop_back();         //void pop_back();尾删元素l1.pop_back();l1.pop_front();         //void pop_front();前删元素l1.pop_front();cout << "l1  :"; PrintList(l1);cout << "insert test" << endl;l1.insert(l1.begin(), 1);       //iterator insert (iterator position, const T& val);迭代器位置插入一个value;cout << "l1:  "; PrintList(l1);l1.insert(l1.begin(), 3, 1);    // void insert(iterator position, size_type n, const T& val);迭代器位置插入n个value;cout << "l1:  "; PrintList(l1);l1.insert(l1.begin(), l2.begin(), l2.end());   ////void insert ( iterator position, InputIterator first, InputIterator last );迭代器位置插入一个迭代器区间;cout << "l1:  "; PrintList(l1);cout << "erase test" << endl;cout << "l1:  "; PrintList(l1);//iterator erase(iterator position);  迭代器位置删除一个元素l1.erase(l1.begin());cout << "l1:  "; PrintList(l1);//iterator erase(iterator first, iterator last);迭代器区间删除一堆元素l1.erase(++l1.begin(), --l1.end());cout << "l1:  "; PrintList(l1);cout << "swap test" << endl;cout << "l1:  "; PrintList(l1);  cout << "l2:  "; PrintList(l2);l1.swap(l2);              //交换两个listcout << "l1:  "; PrintList(l1);cout << "l2:  "; PrintList(l2);cout << "clear test" << endl;cout << "l2:  "; PrintList(l2);l2.clear();                 //清除整个listcout << "l2:  "; PrintList(l2);}



7.operations:关于list的一些操作

void operationstest(){listl1(4, 10);listl2(10, 8);cout << "l1  :"; PrintList(l1);cout << "l2  :"; PrintList(l2);cout << "remove test" << endl;l1.insert(++l1.begin(), 3, 3);cout << "l1:  "; PrintList(l1);l1.remove(3);           //void remove ( const T& value ); 删除所有的3cout << "l1:  "; PrintList(l1);cout << "remove_if  test" << endl;  //删除满足要求的元素   bool lessthanfive(const int& x){return x<5;}所有小于5的被删了l1.insert(++l1.begin(), 3, 3);cout << "l1:  "; PrintList(l1);l1.remove_if(lessthanfive);cout << "l1:  "; PrintList(l1);cout << "unique" << endl;//void unique();//删除重复的元素只保留一份(连续重复的元素删除,与sort一起使用效果更佳)l1.insert(++l1.begin(), 3, 3);cout << "l1:  "; PrintList(l1);l1.unique();cout << "l1:  "; PrintList(l1);cout << "sort test" << endl; l1.push_back(30);l1.push_back(1);l1.push_back(2);l1.sort();                 //空参数默认降序l1.sort(bigthan);     //   重载了升降序template void sort ( Compare comp )涉及到仿函数来决定升降序。                             //bool  bigthan(const int&first, const int &second){return first>second;}cout << "l1  :"; PrintList(l1);cout << "splice test" << endl;l1.splice(++l1.begin(), l2);     //void splice(iterator position, list& x);将l2中的元素剪切到l1中pos位置开始的迭代器后面cout << "l1  :"; PrintList(l1);cout << "l2  :"; PrintList(l2);l1.assign(3, 5);l2.assign(5, 4);l2.push_front(2);l2.push_front(1);cout << endl;cout << "l1  :"; PrintList(l1);cout << "l2  :"; PrintList(l2);l1.splice(++l1.begin(), l2,++l2.begin());  //void splice(iterator position, list& x, iterator i);将l2中从所给迭代器i位置剪切到l1中cout << "l1  :"; PrintList(l1);cout << "l2  :"; PrintList(l2);//void splice(iterator position, list& x, iterator first, iterator last);l1.splice(++l1.begin(), l2, ++l2.begin(), l2.end());  //将l2中从迭代器first到last区间内的元素剪切到l1中;cout << "l1  :"; PrintList(l1);cout << "l2  :"; PrintList(l2);cout << "merge test" << endl;l1.sort(); l2.sort();l1.merge(l2);                  //void merge(list& x);合并两个list并默认/*注意:1)merge()是将两个有序的链表合并成另一个有序的链表,如果有一个链表不是有序的那么在执行代码时会报错:说链表不是有序的。            2)还有,两个链表中的内容排序顺序与合并时采用的排序顺序必须一致,如果不一致,也会报错,说链表不是有序的。如想要降序合并两个链表,那么合并前的两个链表也必须是按降序排列的。        3)另外,当执行完merge()后,右边的链表将变为空。*/cout << "l1  :"; PrintList(l1);cout << "l2  :"; PrintList(l2);}

以上就是大部分用得到的list容器的接口的用法O(∩_∩)O~


0 0