共计 1831 个字符,预计需要花费 5 分钟才能阅读完成。
一、前言
forward_list 是 C++ 11 新增加的一类容器,其底层实现和 list 容器一样,采纳的也是链表构造,只不过 forward_list 应用的是单链表,而 list 应用的是双向链表。单链表只能从前向后遍历,而不反对反向遍历,因而 forward_list 容器只提供前向迭代器,而不是双向迭代器。因而 forward_list 容器不具备 rbegin()、rend() 之类的成员函数。存储雷同个数的同类型元素,单链表耗用的 内存空间更少,空间利用率更高,并且对于实现某些操作单链表的执行效率也更高。
二、forward_list 容器的创立
在应用时,需增加头文件:
#include <forward_list>
using namespace std;
一共有 5 种形式
①std::forward_list<int> forwardListInt;
②std::forward_list<int> forwardListInt(10);
③std::forward_list<int> forwardListInt(10, 5);
④std::forward_list<int> forwardListInt2(forwardListInt);
⑤// 拷贝一般数组,创立 forward_list 容器
int a[] = { 1,2,3,4,5};
std::forward_list<int> values(a, a+5);
// 拷贝其它类型的容器,创立 forward_list 容器
std::array<int, 5> arrayInt{11,12,13,14,15};
std::forward_list<int> forwardListInt(arrayInt.begin()+2, arr.end());
形式与 list 容器相似,在这里不再阐明
三、反对的办法
不阐明迭代器、插入和删除等办法
函数 | 阐明 |
---|---|
empty() | 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false |
max_size() | 返回容器所能蕴含元素个数的最大值,个别是 232-1 |
front() | 返回第一个元素的援用 |
assign() | 用新元素替换容器中原有内容 |
swap(x,y) | 替换两个容器中的元素,必须保障这两个容器中存储的元素类型是雷同的 |
resize() | 调整容器的大小 |
merge() | 合并两个当时已排好序的 forward_list 容器,并且合并之后的 forward_list 容器仍然是有序的 |
sort() | 通过更改容器中元素的地位,将它们进行排序 |
reverse() | 反转容器中元素的程序 |
这些办法的应用在 list 容器中曾经阐明过,在这里不再反复。
四、实例
1、获取 forward_list 容器的元素个数
forward_list 容器中不提供 size()办法,想要获取 forward_list 容器的存储的元素个数能够应用头文件 <iterator> 中的 distance() 函数。
std::forward_list<int> listInt1{72,73,100,72,44,48,109,92,671,109,15,671};
**int nCount = std::distance(std::begin(listInt1), std::end(listInt1));**
std::cout << "forward_list listInt1 size:" << nCount << std::endl;
后果如下:
2、advance()
挪动迭代器地位
std::forward_list<int> listInt1{72,73,100,72,44,48,109,92,671,109,15,671};
int nCount = std::distance(std::begin(listInt1), std::end(listInt1));
std::forward_list<int>::iterator listIter = listInt1.begin();
** advance(listIter, 5);**
int i = 0;
for (; listIter != listInt1.end(); listIter++)
{std::cout << "forward_list[" << i++ << "]=" << *listIter << std::endl;
}
std::cout << "forward_list listInt1 size:" << nCount << std::endl;
后果如下:
所以,advance()仅仅是挪动迭代器的地位,不会影响容器的大小
正文完