容器之list
相对于vector的连续线性空间,list是一个双向链表,它有一个重要性质:插入操作和删除操作都不会造成原有的list迭代器失效,每次插入或删除一个元素就配置或释放一个元素空间。也就是说,对于任何位置的元素插入或删除,list永远是常数时间。
常用函数
int size() const 返回容器元素个数
bool empty() const 判断容器是否为空,若返回true,表明容器已空
void pop_front() 删除容器首元素,当且仅当容器不为空
void pop_back() 删除容器尾元素,当且仅当容器不为空
void push_back(const T& x) list容器尾元素后增加一个元素x
void push_front(const T& x) list容器首元素后增加一个元素x
void remove(const T& x) 删除容器中所有元素值等于x的元素
void clear() 删除容器中所有元素
iterator begin() 返回首元素的迭代器指针
iterator end() 返回尾元素后的迭代器指针,而不是尾元素的迭代器指针
reference front() 返回首元素的引用
reference back() 返回尾元素的引用
void sort() 容器内所有元素排序,默认是升序
void splice(iterator it ,list& x) 队列合并函数,队列x所有元素插入迭代指针it前,x变成空队列。
t1.splice(t1.begin(),t2) 表明把t2中所有元素整体地移动到原始链表t1的首元素前,t1增加了多少个元素,t2就减少了多少个元素。
splice完成的是拼接功能,也是数据移动操作,不是复制操作
merge 两个链表merge合并前,一般都已经按升序排好序,合并后的链表元素任然是升序序列。
merge操作是数据移动操作,不是复制操作,因此t1.merge(t2) 表示把t2中所有元素依次移动并插入到源链表t1的适当位置,t1增加了多少个元素,t2就减少了多少个元素。
注:
(1) 对list首尾元素的增加和删除都是非常容易的
(2) list<string> test ; 此时,test.front()相当于string &s=test.front(),返回了首元素的应用;test.begin()相当于list<string>::iterator it=test.begin(),返回了首元素的迭代器指针。因此 test.front()与*test.begin()的结果是一致的。
浙公网安备 33010602011771号