list容器:
一、list基本概念:
list容器:一个双向循环链表。
注:list和vector是两个最常用的容器,各有优缺点。
二、list构造函数:
list<T> lst; //默认构造
list(beg, end); //将(beg, end)区间中的元素拷贝
list(n, elem); //将n个elem拷贝
list(const list& lst); //拷贝构造
//list构造函数
void test01()
{list<int> L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);list<int>L2(L1.begin(), L1.end());list<int>L3(L1);list<int>L4(10, 1000);
}
三、list赋值和交换:
assign(beg, end); //区间拷贝赋值
assign(n, elem); //n个元素拷贝赋值
list& operator=(const list& lst); //等号重载
swap(lst); //交换
//list赋值和交换
void test02()
{list<int> L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);list<int>L2;L2 = L1;list<int>L3;L3.assign(L1.begin(), L1.end());list<int>L4;L4.assign(10, 1000);L1.swap(L4);
}
四、list大小操作:
empty() //判断容器是否为空
size(); //返回元素个数
resize(n); //重新指定容器大小,多删少默认
resize(n, elem); //重新指定容器大小,多删少指定
//list大小操作
void test03()
{list<int>L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);if (L1.empty()){cout << "L1为空" << endl;}else{printList(L1);//10 20 30 40cout << "L1的元素个数为:" << L1.size() << endl;}L1.resize(10,2);//10 20 30 40 2 2 2 2 2 2 L1.resize(2);//10 20
}
五、list插入和删除:
注:新的迭代器:remove --- 移除,删除全部对应元素
//list插入和删除
void test04()
{list<int>L;L.push_back(10);L.push_back(20);L.push_back(30);L.push_front(100);L.push_front(200);L.push_front(300);printList(L);//300 200 100 10 20 30L.pop_back();//300 200 100 10 20L.pop_front();//200 100 10 20L.insert(L.begin(), 1000);//1000 200 100 10 20L.erase(L.begin());//200 100 10 20L.remove(100);//200 10 20L.clear();
}
六、list数据存取:
注:list是链表,并非连续线性空间存储,不支持随机访问。
front(); //返回第一个元素
back(); //返回最后一个元素
ps : list 支持迭代器 ++、-- ,但不支持 +、-(随机访问)
//list数据存取
void test05()
{list<int>L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//L[0];//报错,不可以用[]访问//L.at();//报错,不能用atcout << "第一个元素为:" << L1.front() << endl;cout << "最后一个元素为:" << L1.back() << endl;list<int>::iterator it = L1.begin();it++;//不报错it--;//it = it + 1;//报错,不支持随机访问
}
七、list反转和排序:
reverse(); //反转链表
sort(); //链表排序,默认升序
注:如果想sort降序排列,可自己提供函数名。
//list反转和排序
bool myCompare(int v1,int v2)
{return v1 > v2;//降序排列,使v1>v2
}
void test06()
{list<int>L1;L1.push_back(20);L1.push_back(10);L1.push_back(50);L1.push_back(40);L1.push_back(30);L1.reverse();//30 40 50 10 20L1.sort();//默认升序,10 20 30 40 50L1.sort(myCompare);//自己提供比较函数,降序排列
}