C++ list

来源:互联网 发布:qq飞车冲锋战神数据 编辑:程序博客网 时间:2024/05/22 02:18
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "iostream"#include "string"#include "list"#include <algorithm>#include "functional"using namespace std;//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中重复的元素int main(){    //list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素。    //  list每次增加一个元素,不存在重新申请内存的情况,它的成本是恒定的。而vector每当增加关键元素的时候,都需要重新申请新的更大的内存空间,    //  会调用元素的自身的复制构造函数,存在构造成本。在销毁旧内存的时候,会调用析构函数,存在析构成本。    //  所以在存储复杂类型和大量元素的情况下,list比vector更有优势!    //List将元素按顺序储存在链表中. 与 向量(vector)相比, 它允许快速的插入和删除,但是随机访问却比较慢。    list<int> lst;    lst.assign(7, 100);             // 7个元素,每个都是100    for (auto i : lst){        cout << i << ",";    }    cout << endl;    /////////////////////////////////////////////////////    lst.clear();    for (auto i = 0; i < 7; ++i){//1,2,3,4,5,6,7        //  lst.at(i) = i+1;        lst.push_back(i + 1);    }    cout << "--------------------" << endl;    /////////////////////////////////////////////////////    for (auto i : lst){        cout << i << ",";//输出: 1,2,3,4,5,6,7    }    cout << endl;    cout << "Front: " << lst.front() << endl;//1    cout << "Back: " << lst.back() << endl;//7    for (auto ir = lst.rbegin(); ir != lst.rend(); ir++) {        cout << *ir << " ";//输出: 7,6,5,4,3,2,1    }    cout << endl;    /////////////////////////////////////////////////////    for (auto it = lst.cbegin(); it != lst.cend(); ++it)        cout << *it << ",";//输出: 1,2,3,4,5,6,7    cout << endl;    cout << "Size: " << lst.size() << endl;//7    /////////////////////////////////////////////////////    lst.insert(lst.begin(), 100);    for (auto i : lst){        cout << i << ",";//输出: 100,1,2,3,4,5,6,7    }    cout << endl;    lst.erase(lst.begin());//执行后: 1,2,3,4,5,6,7    //lst.erase(lst.begin(), lst.End()); //使用iterator删除所有元素;    lst.remove(7); //使用remove函数删除指定的对象;    lst.push_back(7);    //sort(lst.begin(), lst.end(), [](const int& a, const  int& b){//& = 从大到小排列    //  return a > b;    //});//执行后: 7,6,5,4,3    lst.pop_back();//执行后: 1,2,3,4,5,6,    if (lst.empty()){        cout << "Empty List!" <<endl;    }    for (auto i : lst){        cout << i << ",";//输出:  1,2,3,4,5,6,    }    cout << endl;    reverse(lst.begin(), lst.end());//元素翻转    for (auto i : lst){        cout << i << ",";//输出: 6,5,4,3,2,1    }    cout << endl;    lst.pop_front();//删除头元素    lst.pop_back(); //删除尾元素    lst.push_front(6);    lst.push_back(1);    for (auto i : lst){        cout << i << ",";//输出: 6,5,4,3,2,1    }    cout << endl;//  lst.push_front(6);//  lst.push_front(5);//  lst.unique();    for (auto i : lst){        cout << i << ",";//输出: 6,5,4,3,2,1    }    cout << endl;    lst.remove_if([](const int& value){        return value < 4;    });    for (auto i : lst){        cout << i << ",";//输出: 6,5,4,    }cout << endl;    lst.push_back(3); lst.push_back(2); lst.push_back(1);//执行后: 6,5,4,3,2,1    lst.remove_if([](const int& value){        return (value % 2) == 1;    });    for (auto i : lst){        cout << i << ",";//输出: 6,4,2,    }cout << endl;    lst.erase(++lst.begin());//清除第二个元素    for (auto i : lst){        cout << i << ",";//输出: 6,2,    }cout << endl;    while (1);    return 0;}
0 0