一、std::array
std::array会在编译时创建一个固定大小的数组,std::array不能够被隐式的转换成指针,使用std::array很简单,只需指定其类型和大小即可:
std::array<int, 4> arr= {1,2,3,4};
int len = 4;
std::array<int, len> arr = {1,2,3,4}; // 非法, 数组大小参数必须是常量表达式
将其兼容c风格的接口:
void foo(int *p, int len) {
return;
}
std::array<int 4> arr = {1,2,3,4};
// C 风格接口传参
// foo(arr, arr.size()); // 非法, 无法隐式转换
foo(&arr[0], arr.size());
foo(arr.data(), arr.size());
// 使用 `std::sort`
std::sort(arr.begin(), arr.end());
二、std::forward_list
std::forward_list 是一个列表容器,使用方法和 std::list 基本类似。
需要知道的是,和 std::list 的双向链表的实现不同,std::forward_list使用单向链表进行实现,提供了 O(1) 复杂度的元素插入,不支持快速随机访问(这也是链表的特点),也是标准库容器中唯一一个不提供 size()方法的容器。当不需要双向迭代时,具有比 std::list 更高的空间利用率。