zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    团队项目-第一阶段冲刺7
    团队项目-第一阶段冲刺6
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(六) 消息队列篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(四) 配置文件篇
  • 原文地址:https://www.cnblogs.com/hdk1993/p/5805960.html
Copyright © 2011-2022 走看看