C++ list
2015-08-07 12:05
429 查看
// 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; }
相关文章推荐
- C++ 记录程序运行时间
- 暑期学校ACM之旅
- 关于c语言的typedef高级用法 typedef void (*post_sync_t)(CO_Data*);
- C/C++校招笔试面试经典题目总结十
- C++ 静态全局变量与普通全局变量
- 二分查找(c & c++)
- 字典树的基本知识及使用C语言的相关实现
- 利用ffmpeg将H264流 解码为RGB 分类: VC++ ffmpeg-SDL-VLC-Live555 2015-08-07 11:39 155人阅读 评论(0) 收藏
- 双缓冲解决VC++绘图时屏幕闪烁
- C++:overload, override和overwrite
- 详解次小生成树以及相关的C++求解方法
- c语言》查找法-数组下标
- 面试笔试(C++部分)
- C++_Switch Statement
- Sublime 在win上搭建C++环境
- C++抽象机制之二:运算符重载
- HDOJ 2024 C语言合法标识符(水)
- C++ Vector
- C++ AMP 介绍(两)
- c++ STL中的set容器