list成员方法:
-
push_front():向 list 容器首个元素前添加新元素;
-
push_back():向 list 容器最后一个元素后添加新元素;
-
emplace_front():在容器首个元素前直接生成新的元素;
-
emplace_back():在容器最后一个元素后直接生成新的元素;
-
emplace():在容器的指定位置直接生成新的元素;
-
insert():在指定位置插入新元素;
-
splice():将其他 list 容器存储的多个元素添加到当前 list 容器的指定位置处。
insert 使用与 vector、deque相同,详见
vector容器的插入与删除。
和 insert() 成员方法相比,splice() 成员方法的作用对象是其它 list 容器,其功能是将其它 list 容器中的元素添加到当前 list 容器中指定位置处。
语法格式
|
功能
|
void splice (iterator position, list& src);
|
position 为迭代器,用于指明插入位置;src 为另一个 list 容器。
此格式的 splice() 方法的功能是,将 src 容器中存储的所有元素全部移动当前 list 容器中 position 指明的位置处。
|
void splice (iterator position, list& src, iterator i);
|
position 为迭代器,用于指明插入位置;src 为另一个 list 容器;i 也是一个迭代器,用于指向 src 容器中某个元素。
此格式的 splice() 方法的功能是将 src 容器中 i 指向的元素移动到当前容器中 position 指明的位置处。
|
void splice (iterator position, list& src, iterator first, iterator last);
|
position 为迭代器,用于指明插入位置;src 为另一个 list 容器;[fist,last) 用于指定 src 容器中的某个区域。
此格式的 splice() 方法的功能是将 src 容器 [first, last) 范围内所有的元素移动到当前容器 position 指明的位置处。
|
list 容器底层使用的是链表存储结构,详见博客
list的底层实现原理
,splice() 成员方法移动元素的方式是,将存储该元素的节点从 list 容器底层的链表中摘除,然后再链接到当前 list 容器底层的链表中。这意味着,当使用 splice() 成员方法将 src 容器中的元素添加到当前容器的同时,该元素会从 src 容器中删除。
list<int>sample1{ 1,2,3,4 }, sample2{ 5,6,7 };
sample1.splice(sample1.begin(), sample2);
sample2.splice(sample2.begin(), sample1, sample1.begin());
sample2.splice(sample2.end(), sample1, sample1.begin(), sample1.end());
注意:list容器迭代器为双向迭代器,不支持 p+i 或 p-i 操作,比较时不支持 > 、< 、>= 、<=运算符 ,各类迭代器用法详见迭代器类型
成员函数 | 功能 |
---|
pop_front() | 删除位于 list 容器头部的一个元素。 |
pop_back() | 删除位于 list 容器尾部的一个元素。 |
erase() | 该成员函数既可以删除 list 容器中指定位置处的元素,也可以删除容器中某个区域内的多个元素。 |
clear() | 删除 list 容器存储的所有元素。 |
remove(val) | 删除容器中所有等于 val 的元素。 |
unique() | 删除容器中相邻的重复元素,只保留一份。 |
remove_if() | 删除容器中满足条件 |
list<char>sample{ 'a','b','c','d','e','f','g' };
sample.erase(--sample.end());
sample.erase(--sample.end(), sample.end());
sample.remove('c');
list<int>sample_int{ 1,2,1,2,3,4,5,5,5 };
sample_int.unique();
sample_int.sort();
sample_int.unique();
unique() 函数还可自定义去重规则:
bool demo(double first, double second)
return (int(first) == int(second));
void main()
list<double> mylist{ 1.1, 1.2, 2.2, 2.3, 3.1, 4.1 };
mylist.unique(demo);
规则可以用Lambda表达式以及函数对象的方式定义,要求返回值为bool型。若相邻两值满足规则,则去除重复值。
通过将自定义的谓词函数(不限定参数个数)传给 remove_if() 成员函数,list 容器中能使谓词函数成立的元素都会被删除。
list<int> mylist{ 15, 16, 7, 17, 19, 9, 8};
mylist.remove_if([](int value) {return (value < 10); });
【STL】list容器插入与删除添加或插入新元素list成员方法:push_front():向 list 容器首个元素前添加新元素;push_back():向 list 容器最后一个元素后添加新元素;emplace_front():在容器首个元素前直接生成新的元素;emplace_back():在容器最后一个元素后直接生成新的元素;emplace():在容器的指定位置直接生成新的元素;insert():在指定位置插入新元素;splice():将其他 list 容器存储的多个元素添加到当前
1.关于list容器
list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的实现大概是这样的:list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。前驱元素指针域保存了前驱元素的首地址;数据域则是本节点的数据;后继元素指针域则保存了后继元素的首地址。其实,list和循环链表也有相似的地方,即:头节点的前驱元素指针域保存的是链表中尾元素的首地址,list的尾节点的后继元素指针域则保存了头
没有直接根据第几个元素来插入的函数,不过可以这样来插入第n个元素
list<int>::iterator j = a.begin();
for(i = 0; i < n && j!= a.end(); ++i)
a.insert(j,5,100);
读任意一个元素也可以用同样方法函数,不过可以这样...
list简介
list 是一个双向链表容器,可高效地进行插入删除元素。
list 不可以随机存取元素,所以不支持 at.(pos)函数与[]操作符。It++(ok) it+5(err)
#include
list的默认构造
list 采用采用模板类实现,对象的默认构造形式:list<T> lstT; 如:
list<int> lstInt; //定义一个存放 int 的 ...
STL——list类list简介list的使用list的构造函数list的迭代器list的capacitylist的元素提取list的插入和删除
list简介
1、list的插入和删除的时间复杂度是在常数范围内的序列式容器,并且由于list的底层是用双链表实现的,该容器支持双向迭代。
2、与其他序列式容器相比(array,vector,deque),list在任意位置进行插入和删除的效率更高。
3、list最大的缺陷就是不支持任意位置的随机访问。
list的使用
list的构造函数
push_back(elem); //在容器尾部加入一个元素
pop_back(); //删除容器最后一个元素
push_fron(elem); //在容器开头插入一个元素
pop_front(); //从容器中移除第一个容器
insert(pos, elem); //在pos位置插入elem元素的拷贝,返回新数据的位置。
insert(pos, n, elem)
C++中的STL(Standard Template Library)是一组通用的模板类和函数,它们可用于实现许多常用的数据结构和算法,其中包括许多容器类。下面是STL中常见的容器类:
1. vector:向量容器,用于存储动态大小的元素序列,支持快速随机访问和尾部插入/删除操作。
2. list:链表容器,用于存储动态大小的元素序列,支持快速插入/删除操作,但不支持随机访问。
3. deque:双端队列容器,用于存储动态大小的元素序列,支持快速随机访问和头部/尾部插入/删除操作。
4. set/multiset:集合容器,用于存储一组不重复的元素,支持快速查找、插入和删除操作。multiset允许重复元素。
5. map/multimap:映射容器,用于存储一个键值对的集合,支持快速查找、插入和删除操作。multimap允许键重复。
6. stack:栈容器,用于存储一组元素,支持在末尾插入和删除元素,遵循先进后出(LIFO)的原则。
7. queue:队列容器,用于存储一组元素,支持在末尾插入和头部删除元素,遵循先进先出(FIFO)的原则。
8. priority_queue:优先队列容器,用于存储一组元素,支持在末尾插入和弹出元素,但弹出的元素总是具有最高优先级。
这些容器类都是模板类,因此可以存储不同类型的数据。它们提供了许多有用的成员函数和迭代器,可以方便地操作元素序列。