list

std::list支持从容器的任何位置快速插入和删除元素,不支持随机访问。双向链表,头文件:<list>
定义:

template<
    class T,
    class Allocator = std::allocator<T>
> class list;

参数解释:
1. T 元素类型
T必须满足可拷贝复制(CopyAssignable)和可拷贝构造(CopyConstructible)的要求
2. Allocator 用于获取/释放内存及构造/析构内存中元素的分配器

常用函数

front()

reference front();
const_reference front() const;

返回容器的第一个元素的引用。空容器上行为未定义

back()

reference back();
const_reference back() const;

返回到容器中最后一个元素的引用。空容器上行为未定义

empty()

bool empty() const;

返回容器是否为空

size()

size_type size() const;

返回容器中元素个数

clear()

void clear();

删除容器内所有元素。调用后size()返回0

resize()

void resize(size_type count, T value = T());

重设容器的大小为count个元素。如果当前size()大于count,则在尾部增加元素,并以value的副本初始化。

insert()

iterator insert(iterator pos, const T& value); //(1)
void insert(iterator pos, size_type count, const T& value); //(2)
template<class InputIt>
void insert(iterator pos, InputIt first, InputIt last); //(3)

插入元素到容器的指定位置。
1. 在pos前插入value
2. 在pos前插入value的count个副本
3. 在pos前插入来自范围[first, last)的元素

emplace()

template<class... Args>
iterator emplace(const_iterator pos, Args&&... args); //c++11

直接在pos前插入元素到容器,通过std::allocator_traits::construct构造元素,将参数args…作为std::forward<Args>(args)…转发给构造函数。返回指向插入元素的iterator

erase()

iterator erase(iterator pos); //(1)
iterator erase(iterator first, iterator last); //(2)

从容器内删除指定元素,返回被移除元素之后的迭代器
1. 删除位于pos的元素
2. 删除范围[first, last)中的元素

push_back

void push_back(const T& value);

将元素value添加到容器尾部

emplace_back()

template<class... Args>
void emplace_back(Args&&... args); //c++11

添加新元素到容器尾部。通过std::allocator_traits::construct构造,参数args…以std::forward(args)…转发到构造函数。

pop_back()

void pop_back();

移除容器最后一个元素。在空容器上调用,行为未定义

push_front()

void push_front(const T& value);

将元素value添加到容器的头部

emplace_front

template<class... Args>
void emplace_front(Args&&... args);

插入元素到容器开始,通过std::allocator_traits::construct构造元素,将参数args…作为std::forward(args)…转发给构造函数

pop_front()

void pop_front();

移除容器第一个元素,如果容器为空,则行为未定义

swap()

void swap(list& other);

将内容和other的交换

merge()

void merge(list& other); //(1)
template<class T>
void merge(list& other, Compare comp) //(2)

归并两个已排序链表为一个。操作后other变为空。
1. 使用operator< 归并
2. 使用comp 归并

splice()

void splice(const_iterator pos, list& other); //(1)
void splice(const_iterator pos, list& other, const_iterator it); //(2)
void splice(const_iterator pos, list& other, const_iterator first, const_iterator last); //(3)

从一个list转移元素给另一个。不复制或者移动元素,仅重值向链表节点的内部指针。
1. 从other转移所有元素到*this中,元素被插入到pos指向的元素之前。操作后容器other变成空。如果other和*this指代同一对象则行为未定义
2. 从other转移it所指代的元素到*this。元素被插入到pos所指向的元素之前。
3. 从other转移范围[first, last)中的元素到*this。元素被插入到pos所指向的元素之前。如果pos是范围[first, last)中的迭代器则行为未定义

reverse
cpp

打赏 赞(21)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

发表评论

邮箱地址不会被公开。 必填项已用*标注