一:list的特点
1.list中每个元素存放于堆中,可以不连续,通过指针进行数据访问;
2.随机访问效率低下;
3.list没有提供[]操作符的重载;
4.可以在任意位置插入删除,且效率高。
二:list定义与初始化
list<int> lst;//定义int型列表
list<int> lst1(10);//size为10,默认值为0
list<int> lst2(10, 10);//size为10,元素值为10
list<int> lst3 = { 1,2,3,4 };
list<int> lst4{ 1,2,3,4 };
list<int> lst5(lst3);
list<int> lst6 = lst3;
list<int> lst7(lst3.begin(), lst3.end());
三:基本操作
lst3.push_back(1);//尾部插入
lst3.size();//元素个数
lst3.push_front(1);//头部插入
lst3.pop_back();
lst3.pop_front();
lst3.back();
lst3.front();
lst3.insert(lst3.end(), 1);
lst3.insert(lst3.end(), 5, 1);
lst3.insert(lst3.end(), lst4.begin(), lst4.end());
lst3.erase(lst3.begin());
lst3.erase(lst3.begin(), lst3.end());
lst3.assign(2, 3);
lst3.assign(lst4.begin(), lst4.end());
lst3.sort();//排序
lst3.merge(lst4);//合并两个list,并按从小到大排列
lst3.unique();//删除相邻重复元素
lst3.reverse();//反转
lst3.remove(2);//删除元素值
lst3.clear();
四:迭代器
与vector类似,详见前文vector介绍。
五:总结
1.list一般不会预留空间,插入时分配内存,删除时释放内存;
2.插入和删除效率高,不需要移动内存;但是随机访问效率低(指针访问);
3.时间复杂度:访问时间复杂度时O(n);插入时间复杂度:push_front为O(1),push_back为O(1),insert为O(1);删除时间复杂度:pop_front为O(1),pop_back为O(1),erase为O(1)。