list
#include<iostream>
//常用头文件
//容器头文件
//顺序容器
#include<vector>
#include<list>
#include<deque>
//关联容器
#include<set>
//multiset
#include<map>
//multimap
//容器适配器
#include<stack>
#include<queue>
//priority_queue
//函数对象头文件
#include<functional>
//泛型算法头文件
#include<algorithm>
//迭代器头文件
#include<iterator>
using namespace std;
template<typename Container>
void Show(Container& con)
{
copy(con.begin(), con.end(),
ostream_iterator<typename Container::value_type>(cout, " "));
cout << endl;
}
//list底层为双向循环链表
int main()
{
int arr[] = { 6, 1, 23, 123, 645, 45, 65 };
int len = sizeof(arr) / sizeof(arr[0]);
list<int> list1;
list<int> list2(arr, arr + len);
//list<int>::iterator rt = find(list2.begin(), list2.end(), 6);
////查找容器在迭代器区间中值为10的元素,查找成功返回当前元素的迭代器,失败返回尾部迭代器
//if (rt == list2.end())
//{
// cout << "not find" << endl;
//}
//else
//{
// cout << *rt << endl;
//}
list1.push_back(20);
list1.push_front(30);
list1.insert(list1.begin(), 30);
//Show(list1);
/*list1.pop_back();
list1.pop_front();
list1.erase(list1.begin());*/
list1.clear();//清空
//Show(list1);
//sort(list2.begin(), list2.end());//err 因为list底层内存不连续,不能排序
list2.sort();
Show(list2);
//迭代器减偏移(内存连续才能拿指针减偏移量)
return 0;
}
deque
//deque
//映射关系,二维数组
template<typename Container>
void Show(Container& con)
{
copy(con.begin(), con.end(),
ostream_iterator<typename Container::value_type>(cout, " "));
cout << endl;
}
int main()
{
int arr[] = { 6, 1, 23, 123, 645, 45, 65 };
int len = sizeof(arr) / sizeof(arr[0]);
list<int> list2(arr, arr + len);
deque<int> dq1;
deque<int> dq2(list2.begin(),list2.end());
/*dq1.push_back(20);
dq1.push_front(10);
dq1.insert(dq1.end(), 30);*/
//Show(dq1);
/*deque<int>::iterator rt = find(dq1.begin(), dq1.end(), 20);
if (rt != dq1.end())
{
dq1.erase(rt);
}*/
//Show(dq1);
//dq1.clear();
sort(dq2.begin(), dq2.end());
Show(dq2);
return 0;
}
vector 底层为连续的数组 由于备用空间的存在,可能会浪费空间
list 不浪费空间,访问效率低,需要遍历每一个结点
deque 双端队列