STL中list各个接口的使用

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~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值