STL标准库中的list接口

来源:互联网 发布:java.util.*是什么包 编辑:程序博客网 时间:2024/06/09 15:42
                                     list接口
在标准STL库中list接口如下:

list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。

使用list容器之前必须加上<vector>头文件:#include<list>;

list属于std命名域的内容,因此需要通过命名限定:using std::list;也可以直接使用全局的命名空间方式:using namespace std;

1.构造函数、拷贝构造函数
int main(){list<int> l1; //空链表list<int> l2(3); //建一个含三个默认值是的元素的链表list<int> l3(5,2); //建一个含五个元素的链表,值都是list<int> l4(l3); //建一个的copy链表list<int> l5(++l3.begin(),--l3.end()); ////c5含c1一个区域的元素[_First, _Last)。list<int>::iterator it1;//使用迭代器去遍历l1对象里的元素list<int>::iterator it2;//使用迭代器去遍历l2对象里的元素list<int>::iterator it3;//使用迭代器去遍历l3对象里的元素list<int>::iterator it4;//使用迭代器去遍历l4对象里的元素list<int>::iterator it5;//使用迭代器去遍历l5对象里的元素it1 = l1.begin();while (it1 != l1.end()){     cout << *it1 << " ";     ++it1;}cout << endl;it2 = l2.begin();while (it2 != l2.end()){     cout << *it2 << " ";     ++it2;}cout << endl;it3 = l3.begin();while (it3 != l3.end()){     cout << *it3 << " ";     ++it3;}cout << endl;it4 = l4.begin();while (it4 != l4.end()){     cout << *it4 << " ";     ++it4;}cout << endl;it5 = l5.begin();while (it5 != l5.end()){     cout << *it5 << " ";     ++it5;}cout << endl;return 0;}


 2.迭代器成员函数
 begin()      返回指向链表第一个元素的迭代器。
 end()       返回指向链表最后一个元素之后的迭代器。
c.begin()      返回指向链表第一个元素的迭代器。(c++11标准)
c.end()      返回指向链表最后一个元素之后的迭代器。(c++11标准) 
it4 = l4.begin();while (it4 != l4.end()){     *it4 = 1;     cout << *it4 << " ";     ++it4;}cout << endl;结果显示:1>f:\程序\stl接口\stl接口\源.cpp(35): error C3892: “it4”: 不能给常量赋值
rbegin()      返回逆向链表的第一个元素,即c链表的最后一个数据。
rend()      返回逆向链表的最后一个元素的下一个位置,即c链表的第一个数据再往前的位置。
void  Test1(){     list<int>l1;     l1.push_back(1);     l1.push_back(2);     l1.push_back(3);     l1.push_back(4);     list<int>::reverse_iterator it = l1.rbegin();     while (it != l1.rend())     {          cout << *it << " ";          ++it;     }}
结果是:4 3 2 1。
c.rbegin()      返回逆向链表的第一个元素,即c链表的最后一个数据。(c++11)
c.rend()      返回逆向链表的最后一个元素的下一个位置,即c链表的第一个数据再往前的位置。(c++11)
类似rbegin()和rend()只不过不可赋值。
3.Capacity:关于容量的一些方法
empty();  bool empty() constsize();  size_type size() const  max_size(): size_type max_size() const  resize(size_type new_size, const T& x);// 新的大小并将最后一个数赋x  resize(size_type new_size);//新的大小void Test2(){     list<int>l1(3);     cout << l1.empty()<<endl;//判断链表空不空      cout << l1.size()<<endl;//结点的个数     cout << l1.max_size()<<endl;  //返回      l1.resize(5);// 使链表变成个结点      cout << l1.size() << endl;       l1.resize(6, 6);//将链表变成个值为的结点      cout << l1.size() << endl;      list<int>::iterator it5;           it5 = l1.begin();      while (it5 != l1.end())      {          cout << *it5 << " ";          ++it5;      }      cout << endl;}
4.element access
 
 reference front() ;// 返回*begin()  const_reference front() const ;  reference back() ; //返回*(--end())  const_reference back() const  ;
5.push_back    pop_back   push_front   pop_front  
void Test3(){      // push_back    pop_back    list<int> l4;     l4.push_back(1);     l4.push_back(2);     l4.push_back(3);     l4.push_back(4);     l4.pop_back();     l4.pop_back();     l4.pop_back();     list<int>::iterator it1=l4.begin();     while (it1!=l4.end())     {          cout<<*it1<<" ";          ++it1;     }     cout<<endl;   //push_front   pop_front      list<int> l5;      l5.push_front(5);       l5.push_front(6);         l5.push_front(7);           l5.pop_back();           l5.pop_back();list<int>::iterator it2=l5.begin();     while (it2!=l5.end())     {          cout<<*it2<<" ";          ++it2;     }     cout<<endl; }
6.insert  erase  clear   swap
iterator insert ( iterator position, const T& x );//在position位置插入元素num。
insert(iterator position, size_type n, const T& x);//  在position位置插入n个元素num
insert ( iterator position, InputIterator first, InputIterator last );//在position位置插入区间为[first,last)的元素
iterator erase(iterator position);//删除position
 iterator erase(iterator first, iterator last);//删除区间为[first,last)的元素
void  Test4(){     list<int>l1;     list<int>l2;     list<int>l3;     l1.insert(l1.begin(), 1);     l2.insert(l2.begin(), 8, 2);     l3.insert(l3.begin(), ++l2.begin(), --l2.end());     list<int>::iterator it1;     it1 =l1.begin();     while (it1 !=l1.end())     {          cout << *it1 << " ";          ++it1;     }     cout << endl;     list<int>::iterator it2;     it2 = l2.begin();     while (it2 != l2.end())     {          cout << *it2 << " ";          ++it2;     }     cout << endl;     list<int>::iterator it3;     it3= l3.begin();     while (it3 != l3.end())     {          cout << *it3 << " ";          ++it3;     }     cout << endl; //erase l2.erase(l2.begin());l3.erase(++l3.begin(), l3.end());list<int>::iterator it4;it4= l2.begin();while (it4 != l2.end()){     cout << *it4 << " ";     ++it4;}cout << endl;list<int>::iterator it5;it5= l3.begin();while (it5 != l3.end()){     cout << *it5 << " ";     ++it5;}cout << endl; //clearl3.clear();list<int>::iterator it6;it6= l3.begin();while (it6 != l3.end()){     cout << *it6 << " ";     ++it6;}cout << endl; //swap     l1.swap(l2);      list<int>::iterator it7;     it7= l2.begin();     while (it7 != l2.end())     {          cout << *it7 << " ";          ++it7;     }     cout << endl;     list<int>::iterator it8;     it8= l1.begin();     while (it8 != l1.end())     {          cout << *it8 << " ";          ++it8;     }     cout << endl;}

7.splice
void  Test5() {      list<int> l1;      list<int> l2;      list<int>  l3(l2);      l1.insert(l1.begin(),5,8);      l2.insert(l2.begin(),9,10);      l1.splice(l1.begin(),l2); //将l2连接在l1的begin位置,释放l2      l3.splice(l1.begin(),l2,l2.begin(),l2.end());// 将l2的[begin,end)位置的元素连接到l1的begin位置并且释放l2的[begin,end)位置的元素 list<int>::iterator it1;      it1 =l1.begin();      while (it1 !=l1.end())      {           cout << *it1 << " ";           ++it1;      }      cout << endl;      list<int>::iterator it2;      it2 = l2.begin();      while (it2 != l2.end())      {           cout << *it2 << " ";           ++it2;      }      cout << endl;      list<int>::iterator it3;      it3 =l1.begin();      while (it3 !=l1.end())      {           cout << *it3 << " ";           ++it3;      }      cout << endl;      }

8.sort和unique
void Test6() {      //sort    list<int> l1;     l1.push_back(1);     l1.push_back(2);     l1.push_back(5);     l1.push_back(4);     l1.push_back(5);     l1.push_back(4);     l1.push_back(3);     l1.sort();     list<int>::iterator it1;     it1 =l1.begin();     while (it1 !=l1.end())     {          cout << *it1 << " ";          ++it1;     }     cout << endl;     //reverse     l1.reverse();     list<int>::iterator it2;     it2 = l1.begin();     while (it2 != l1.end())     {          cout << *it2 << " ";          ++it2;     }     cout << endl; //uniquel1.unique();list<int>::iterator it3;it3 = l1.begin();while (it3 != l1.end()){     cout << *it3 << " ";     ++it3;}cout << endl;}
9.merge
void Test7(){    //void merge(list<T, Allocator>& x);    list<int>l1(2, 1);    list<int>l2(2, 2);    l1.merge(l2);//把l2中所有的元素都合并到l1中    list<int>::iterator it1 = l1.begin();    while (it1 != l1.end())    {        cout << *it1 << " ";        it1++;    }    cout << endl;}
10.remove
 
void Test8() {    list<int> l1(5,1);     l1.remove(1);//删除节点为1的数据     list<int>::iterator it1 = l1.begin();     while (it1 != l1.end())     {          cout << *it1 << " ";          it1++;     }     cout << endl; }

11. 运算符重载

operator==

operator!=

operator<

operator<=

operator>

operator>=
1 0
原创粉丝点击