目录
刚才看了一些vector然后我发现还是很乱,既然都很乱,之后容器还是写的全一点吧.
列表(list)
一个双向链表,相对vector的联系空间,list复杂很多,它可以快速的插入和删除,但是随机访问比较慢.
因为是链表实现,所以他不会造成空间浪费.
初始化(构造函数和分配值)
#include <iostream>
#include <list>
#include <vector>
using namespace std;
int main()
{
//其实容器内的函数都差不多,构造函数基本和vector完全一样
list<int> l; //创建一个空的list
list<int> l2(3); //创建一个含有3个元素的list
list<int> l3(3, 1); //创建一个含有3个元素的list,每个都初始化为1
list<int> l4(l3); //创建一个list,并用l3对齐进行初始化
list<int> l5(l4.begin(), l4.end()); //用迭代器进行初始化
//也可以为其分配值
l.assign(l4.begin(), l4.end());
l2.assign(3, 1); //为其赋值3个1
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
list<int> l6(arr, arr + 10); //使用数组对其进行初始化
//遍历
//for (list<int>::iterator it = l5.begin(); it != l5.end(); ++it)
for (auto it = l6.begin(); it != l6.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
//定义一个迭代器
auto it = l6.begin();
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
auto it2 = v.begin();
//it + 2; //错误不支持随机访问
it2 + 2; //correct
cout << *(it2 + 2) << endl;
return 0;
}
迭代器
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> l;
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
l.assign(arr, arr + 10);
//正向迭代器
auto it_end = l.end();
//cout << *it_end << endl; //程序会蹦 指向的是最后一个元素的下一位置
auto it_begin = l.begin();
cout << *it_begin << endl; //输出的是第一个元素 1
for (auto it = l.begin(); it != l.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
cout << endl;
cout << endl;
//逆向迭代器
auto rit_end = l.rend();
//cout << *rit_end <