1. 新增容器
1.1 array
array: 使用C++去封装的一个静态数组,用的是非类型模板参数,符合迭代器的规范,可以使用范围for来访问
array真正的价值:
C语言有一个问题,没有办法进行严格的边界检查,它是一个抽查
而array的 operator[] 可以进行检查,读写都可以
代码:
int main()
{
array<int, 10> a1;
//a1[10]; //越界了,程序执行之后会直接检查出来
//array是为了对标C语言的原生数组,它的优点就是检查很严格
//但实际上使用vector更方便
vector<int> v(10, 0); //而且这里会初始化, array<int,10> a1; 不会初始化
//所以实践中array没有太多价值
//array的对象所占空间是开在栈上的
//vector是开在堆上的
cout << sizeof(a1) << endl; //随着非类型模板参数的变化而变化
cout << sizeof(v) << endl; //恒为16
return 0;
}
1.2 forward_list
forward_list:单向链表
优点:节省空间,每个节点中会少存储一个指针
但是只适合头插、头删
插入和删除操作都是打折实现的:
代码示例:
int main()
{
forward_list<int> fl;
fl.push_front(1);
fl.push_front(8);
fl.push_front(10);
return 0;
}
1.3 哈希表
哈希表是新增的很有用的容器,效率相比map和set会高上一些,在其他博客中介绍过,这里就不介绍了。
2. 新增的容器成员函数
基本每个容器中都增加了一些C++11的新函数,但是其实大多都是用得比较少的。
比如提供了cbegin和cend函数返回const迭代器等等,实际意义不大,因为begin和end也是可以返回const迭代器的,这些都是属于锦上添花的操作。