• STL list用法


    Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.


    assign() 给list赋值
    back() 返回最后一个元素
    begin() 返回指向第一个元素的迭代器
    clear() 删除所有元素
    empty() 如果list是空的则返回true
    end() 返回末尾的迭代器
    erase() 删除一个元素
    front() 返回第一个元素
    get_allocator() 返回list的配置器
    insert() 插入一个元素到list中
    max_size() 返回list能容纳的最大元素数量
    merge() 合并两个list
    pop_back() 删除最后一个元素
    pop_front() 删除第一个元素
    push_back() 在list的末尾添加一个元素
    push_front() 在list的头部添加一个元素
    rbegin() 返回指向第一个元素的逆向迭代器
    remove() 从list删除元素
    remove_if() 按指定条件删除元素
    rend() 指向list末尾的逆向迭代器
    resize() 改变list的大小
    reverse() 把list的元素倒转
    size() 返回list中的元素个数
    sort() 给list排序
    splice() 合并两个list
    swap() 交换两个list
    unique() 删除list中重复的元素

     

    实例一:

     

    [cpp] view plain copy
    1. #include <iostream>   
    2. #include <list>   
    3. #include <numeric>   
    4. #include <algorithm>   
    5. using namespace std;   
    6.   
    7. //创建一个list容器的实例LISTINT   
    8. typedef list<int> LISTINT;   
    9. //创建一个list容器的实例LISTCHAR   
    10. typedef list<int> LISTCHAR;   
    11.   
    12. void main()   
    13. {   
    14.     //用list容器处理整型数据    
    15.     //用LISTINT创建一个名为listOne的list对象   
    16.     LISTINT listOne;   
    17.     //声明i为迭代器   
    18.     LISTINT::iterator i;   
    19.       
    20.     //从前面向listOne容器中添加数据   
    21.     listOne.push_front (2);   
    22.     listOne.push_front (1);   
    23.       
    24.     //从后面向listOne容器中添加数据   
    25.     listOne.push_back (3);   
    26.     listOne.push_back (4);   
    27.       
    28.     //从前向后显示listOne中的数据   
    29.     cout<<"listOne.begin()--- listOne.end():"<<endl;   
    30.     for (i = listOne.begin(); i != listOne.end(); ++i)   
    31.         cout << *i << " ";   
    32.     cout << endl;   
    33.       
    34.     //从后向后显示listOne中的数据   
    35.     LISTINT::reverse_iterator ir;   
    36.     cout<<"listOne.rbegin()---listOne.rend():"<<endl;   
    37.     for (ir =listOne.rbegin(); ir!=listOne.rend();ir++) {   
    38.         cout << *ir << " ";   
    39.     }   
    40.     cout << endl;   
    41.       
    42.     //使用STL的accumulate(累加)算法   
    43.     int result = accumulate(listOne.begin(), listOne.end(),0);   
    44.     cout<<"Sum="<<result<<endl;   
    45.     cout<<"------------------"<<endl;   
    46.       
    47.     //--------------------------   
    48.     //用list容器处理字符型数据   
    49.     //--------------------------   
    50.       
    51.     //用LISTCHAR创建一个名为listOne的list对象   
    52.     LISTCHAR listTwo;   
    53.     //声明i为迭代器   
    54.     LISTCHAR::iterator j;   
    55.       
    56.     //从前面向listTwo容器中添加数据   
    57.     listTwo.push_front ('A');   
    58.     listTwo.push_front ('B');   
    59.       
    60.     //从后面向listTwo容器中添加数据   
    61.     listTwo.push_back ('x');   
    62.     listTwo.push_back ('y');   
    63.       
    64.     //从前向后显示listTwo中的数据   
    65.     cout<<"listTwo.begin()---listTwo.end():"<<endl;   
    66.     for (j = listTwo.begin(); j != listTwo.end(); ++j)   
    67.         cout << char(*j) << " ";   
    68.     cout << endl;   
    69.       
    70.     //使用STL的max_element算法求listTwo中的最大元素并显示   
    71.     j=max_element(listTwo.begin(),listTwo.end());   
    72.     cout << "The maximum element in listTwo is: "<<char(*j)<<endl;   
    73. }   


    结果:

     

    listOne.begin()--- listOne.end():
    1 2 3 4
    listOne.rbegin()---listOne.rend():
    4 3 2 1
    Sum=10
    ------------------
    listTwo.begin()---listTwo.end():
    B A x y
    The maximum element in listTwo is: y
    Press any key to continue

     

    实例二:

     

    [cpp] view plain copy
    1. #include <iostream>   
    2. #include <list>   
    3.   
    4. using namespace std;   
    5. typedef list<int> INTLIST;   
    6.   
    7. //从前向后显示list队列的全部元素   
    8. void put_list(INTLIST list, char *name)   
    9. {   
    10.     INTLIST::iterator plist;   
    11.       
    12.     cout << "The contents of " << name << " : ";   
    13.     for(plist = list.begin(); plist != list.end(); plist++)   
    14.         cout << *plist << " ";   
    15.     cout<<endl;   
    16. }   
    17.   
    18. //测试list容器的功能   
    19. void main(void)   
    20. {   
    21.     //list1对象初始为空   
    22.     INTLIST list1;   
    23.     //list2对象最初有10个值为6的元素   
    24.     INTLIST list2(10,6);   
    25.     //list3对象最初有3个值为6的元素   
    26.     INTLIST list3(list2.begin(),--list2.end());   
    27.       
    28.     //声明一个名为i的双向迭代器   
    29.     INTLIST::iterator i;   
    30.       
    31.     //从前向后显示各list对象的元素   
    32.     put_list(list1,"list1");   
    33.     put_list(list2,"list2");   
    34.     put_list(list3,"list3");   
    35.       
    36.     //从list1序列后面添加两个元素   
    37.     list1.push_back(2);   
    38.     list1.push_back(4);   
    39.     cout<<"list1.push_back(2) and list1.push_back(4):"<<endl;   
    40.     put_list(list1,"list1");   
    41.       
    42.     //从list1序列前面添加两个元素   
    43.     list1.push_front(5);   
    44.     list1.push_front(7);   
    45.     cout<<"list1.push_front(5) and list1.push_front(7):"<<endl;   
    46.     put_list(list1,"list1");   
    47.       
    48.     //在list1序列中间插入数据   
    49.     list1.insert(++list1.begin(),3,9);   
    50.     cout<<"list1.insert(list1.begin()+1,3,9):"<<endl;   
    51.     put_list(list1,"list1");   
    52.       
    53.     //测试引用类函数   
    54.     cout<<"list1.front()="<<list1.front()<<endl;   
    55.     cout<<"list1.back()="<<list1.back()<<endl;   
    56.       
    57.     //从list1序列的前后各移去一个元素   
    58.     list1.pop_front();   
    59.     list1.pop_back();   
    60.     cout<<"list1.pop_front() and list1.pop_back():"<<endl;   
    61.     put_list(list1,"list1");   
    62.       
    63.     //清除list1中的第2个元素   
    64.     list1.erase(++list1.begin());   
    65.     cout<<"list1.erase(++list1.begin()):"<<endl;   
    66.     put_list(list1,"list1");   
    67.       
    68.     //对list2赋值并显示   
    69.     list2.assign(8,1);   
    70.     cout<<"list2.assign(8,1):"<<endl;   
    71.     put_list(list2,"list2");   
    72.       
    73.     //显示序列的状态信息   
    74.     cout<<"list1.max_size(): "<<list1.max_size()<<endl;   
    75.     cout<<"list1.size(): "<<list1.size()<<endl;   
    76.     cout<<"list1.empty(): "<<list1.empty()<<endl;   
    77.       
    78.     //list序列容器的运算   
    79.     put_list(list1,"list1");   
    80.     put_list(list3,"list3");   
    81.     cout<<"list1>list3: "<<(list1>list3)<<endl;   
    82.     cout<<"list1<list3: "<<(list1<list3)<<endl;   
    83.       
    84.     //对list1容器排序   
    85.     list1.sort();   
    86.     put_list(list1,"list1");   
    87.       
    88.     //结合处理   
    89.     list1.splice(++list1.begin(), list3);   
    90.     put_list(list1,"list1");   
    91.     put_list(list3,"list3");   
    92. }   


    结果:

     

    The contents of list1 :
    The contents of list2 : 6 6 6 6 6 6 6 6 6 6
    The contents of list3 : 6 6 6 6 6 6 6 6 6
    list1.push_back(2) and list1.push_back(4):
    The contents of list1 : 2 4
    list1.push_front(5) and list1.push_front(7):
    The contents of list1 : 7 5 2 4
    list1.insert(list1.begin()+1,3,9):
    The contents of list1 : 7 9 9 9 5 2 4
    list1.front()=7
    list1.back()=4
    list1.pop_front() and list1.pop_back():
    The contents of list1 : 9 9 9 5 2
    list1.erase(++list1.begin()):
    The contents of list1 : 9 9 5 2
    list2.assign(8,1):
    The contents of list2 : 1 1 1 1 1 1 1 1
    list1.max_size(): 1073741823
    list1.size(): 4
    list1.empty(): 0
    The contents of list1 : 9 9 5 2
    The contents of list3 : 6 6 6 6 6 6 6 6 6
    list1>list3: 1
    list1<list3: 0
    The contents of list1 : 2 5 9 9
    The contents of list1 : 2 6 6 6 6 6 6 6 6 6 5 9 9
    The contents of list3 :
    Press any key to continue

    1. #include <iostream>  
    2. #include <list>  
    3. #include <numeric>  
    4. #include <algorithm>  
    5. using namespace std;  
    6.  
    7. //创建一个list容器的实例LISTINT  
    8. typedef list<int> LISTINT;  
    9. //创建一个list容器的实例LISTCHAR  
    10. typedef list<int> LISTCHAR;  
    11.  
    12. void main()  
    13. {  
    14.     //用list容器处理整型数据   
    15.     //用LISTINT创建一个名为listOne的list对象  
    16.     LISTINT listOne;  
    17.     //声明i为迭代器  
    18.     LISTINT::iterator i;  
    19.      
    20.     //从前面向listOne容器中添加数据  
    21.     listOne.push_front (2);  
    22.     listOne.push_front (1);  
    23.      
    24.     //从后面向listOne容器中添加数据  
    25.     listOne.push_back (3);  
    26.     listOne.push_back (4);  
    27.      
    28.     //从前向后显示listOne中的数据  
    29.     cout<<"listOne.begin()--- listOne.end():"<<endl;  
    30.     for (i = listOne.begin(); i != listOne.end(); ++i)  
    31.         cout << *i << " ";  
    32.     cout << endl;  
    33.      
    34.     //从后向后显示listOne中的数据  
    35.     LISTINT::reverse_iterator ir;  
    36.     cout<<"listOne.rbegin()---listOne.rend():"<<endl;  
    37.     for (ir =listOne.rbegin(); ir!=listOne.rend();ir++) {  
    38.         cout << *ir << " ";  
    39.     }  
    40.     cout << endl;  
    41.      
    42.     //使用STL的accumulate(累加)算法  
    43.     int result = accumulate(listOne.begin(), listOne.end(),0);  
    44.     cout<<"Sum="<<result<<endl;  
    45.     cout<<"------------------"<<endl;  
    46.      
    47.     //--------------------------  
    48.     //用list容器处理字符型数据  
    49.     //--------------------------  
    50.      
    51.     //用LISTCHAR创建一个名为listOne的list对象  
    52.     LISTCHAR listTwo;  
    53.     //声明i为迭代器  
    54.     LISTCHAR::iterator j;  
    55.      
    56.     //从前面向listTwo容器中添加数据  
    57.     listTwo.push_front ('A');  
    58.     listTwo.push_front ('B');  
    59.      
    60.     //从后面向listTwo容器中添加数据  
    61.     listTwo.push_back ('x');  
    62.     listTwo.push_back ('y');  
    63.      
    64.     //从前向后显示listTwo中的数据  
    65.     cout<<"listTwo.begin()---listTwo.end():"<<endl;  
    66.     for (j = listTwo.begin(); j != listTwo.end(); ++j)  
    67.         cout << char(*j) << " ";  
    68.     cout << endl;  
    69.      
    70.     //使用STL的max_element算法求listTwo中的最大元素并显示  
    71.     j=max_element(listTwo.begin(),listTwo.end());  
    72.     cout << "The maximum element in listTwo is: "<<char(*j)<<endl;  
    73. }  


    结果:

     

    listOne.begin()--- listOne.end():
    1 2 3 4
    listOne.rbegin()---listOne.rend():
    4 3 2 1
    Sum=10
    ------------------
    listTwo.begin()---listTwo.end():
    B A x y
    The maximum element in listTwo is: y
    Press any key to continue

     

    实例二:

     

    [cpp] view plain copy
    1. #include <iostream>  
    2. #include <list>  
    3.  
    4. using namespace std;  
    5. typedef list<int> INTLIST;  
    6.  
    7. //从前向后显示list队列的全部元素  
    8. void put_list(INTLIST list, char *name)  
    9. {  
    10.     INTLIST::iterator plist;  
    11.      
    12.     cout << "The contents of " << name << " : ";  
    13.     for(plist = list.begin(); plist != list.end(); plist++)  
    14.         cout << *plist << " ";  
    15.     cout<<endl;  
    16. }  
    17.  
    18. //测试list容器的功能  
    19. void main(void)  
    20. {  
    21.     //list1对象初始为空  
    22.     INTLIST list1;  
    23.     //list2对象最初有10个值为6的元素  
    24.     INTLIST list2(10,6);  
    25.     //list3对象最初有3个值为6的元素  
    26.     INTLIST list3(list2.begin(),--list2.end());  
    27.      
    28.     //声明一个名为i的双向迭代器  
    29.     INTLIST::iterator i;  
    30.      
    31.     //从前向后显示各list对象的元素  
    32.     put_list(list1,"list1");  
    33.     put_list(list2,"list2");  
    34.     put_list(list3,"list3");  
    35.      
    36.     //从list1序列后面添加两个元素  
    37.     list1.push_back(2);  
    38.     list1.push_back(4);  
    39.     cout<<"list1.push_back(2) and list1.push_back(4):"<<endl;  
    40.     put_list(list1,"list1");  
    41.      
    42.     //从list1序列前面添加两个元素  
    43.     list1.push_front(5);  
    44.     list1.push_front(7);  
    45.     cout<<"list1.push_front(5) and list1.push_front(7):"<<endl;  
    46.     put_list(list1,"list1");  
    47.      
    48.     //在list1序列中间插入数据  
    49.     list1.insert(++list1.begin(),3,9);  
    50.     cout<<"list1.insert(list1.begin()+1,3,9):"<<endl;  
    51.     put_list(list1,"list1");  
    52.      
    53.     //测试引用类函数  
    54.     cout<<"list1.front()="<<list1.front()<<endl;  
    55.     cout<<"list1.back()="<<list1.back()<<endl;  
    56.      
    57.     //从list1序列的前后各移去一个元素  
    58.     list1.pop_front();  
    59.     list1.pop_back();  
    60.     cout<<"list1.pop_front() and list1.pop_back():"<<endl;  
    61.     put_list(list1,"list1");  
    62.      
    63.     //清除list1中的第2个元素  
    64.     list1.erase(++list1.begin());  
    65.     cout<<"list1.erase(++list1.begin()):"<<endl;  
    66.     put_list(list1,"list1");  
    67.      
    68.     //对list2赋值并显示  
    69.     list2.assign(8,1);  
    70.     cout<<"list2.assign(8,1):"<<endl;  
    71.     put_list(list2,"list2");  
    72.      
    73.     //显示序列的状态信息  
    74.     cout<<"list1.max_size(): "<<list1.max_size()<<endl;  
    75.     cout<<"list1.size(): "<<list1.size()<<endl;  
    76.     cout<<"list1.empty(): "<<list1.empty()<<endl;  
    77.      
    78.     //list序列容器的运算  
    79.     put_list(list1,"list1");  
    80.     put_list(list3,"list3");  
    81.     cout<<"list1>list3: "<<(list1>list3)<<endl;  
    82.     cout<<"list1<list3: "<<(list1<list3)<<endl;  
    83.      
    84.     //对list1容器排序  
    85.     list1.sort();  
    86.     put_list(list1,"list1");  
    87.      
    88.     //结合处理  
    89.     list1.splice(++list1.begin(), list3);  
    90.     put_list(list1,"list1");  
    91.     put_list(list3,"list3");  
    92. }  


    结果:

     

    The contents of list1 :
    The contents of list2 : 6 6 6 6 6 6 6 6 6 6
    The contents of list3 : 6 6 6 6 6 6 6 6 6
    list1.push_back(2) and list1.push_back(4):
    The contents of list1 : 2 4
    list1.push_front(5) and list1.push_front(7):
    The contents of list1 : 7 5 2 4
    list1.insert(list1.begin()+1,3,9):
    The contents of list1 : 7 9 9 9 5 2 4
    list1.front()=7
    list1.back()=4
    list1.pop_front() and list1.pop_back():
    The contents of list1 : 9 9 9 5 2
    list1.erase(++list1.begin()):
    The contents of list1 : 9 9 5 2
    list2.assign(8,1):
    The contents of list2 : 1 1 1 1 1 1 1 1
    list1.max_size(): 1073741823
    list1.size(): 4
    list1.empty(): 0
    The contents of list1 : 9 9 5 2
    The contents of list3 : 6 6 6 6 6 6 6 6 6
    list1>list3: 1
    list1<list3: 0
    The contents of list1 : 2 5 9 9
    The contents of list1 : 2 6 6 6 6 6 6 6 6 6 5 9 9
    The contents of list3 :
    Press any key to continue

  • 相关阅读:
    可爱的中国电信 请问我们的电脑还属于我们自己吗?
    了解客户的需求,写出的代码或许才是最优秀的............
    DELPHI DATASNAP 入门操作(3)简单的主从表的简单更新【含简单事务处理】
    用数组公式获取字符在字符串中最后出现的位置
    在ehlib的DBGridEh控件中使用过滤功能(可以不用 MemTableEh 控件 适用ehlib 5.2 ehlib 5.3)
    格式化json返回的时间
    ExtJs中使用Ajax赋值给全局变量异常解决方案
    java compiler level does not match the version of the installed java project facet (转)
    收集的资料(六)ASP.NET编程中的十大技巧
    收集的资料共享出来(五)Asp.Net 权限解决办法
  • 原文地址:https://www.cnblogs.com/hdk1993/p/5805960.html
Copyright © 2020-2023  润新知