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个8
PrintList(l);
}
6.Modifiers:关于修改链表内容的方法:
void modifierstest()
{
list
l1(4, 10);
list
l2(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); //交换两个list
cout << "l1: "; PrintList(l1);
cout << "l2: "; PrintList(l2);
cout << "clear test" << endl;
cout << "l2: "; PrintList(l2);
l2.clear(); //清除整个list
cout << "l2: "; PrintList(l2);
}
7.operations:关于list的一些操作
void operationstest()
{
list
l1(4, 10);
list
l2(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 ); 删除所有的3
cout << "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~