CSP考试用的STL内容也越来越多了,我们有必要详细了解一下。
常用容器
- array 静态数组(大小固定,)
- vector 矢量(动态数组,大小可变)
- string 字符串
- stack 栈
- queue 队列
- set 集合
- map 键值对
array 静态数组
array是固定大小的序列容器,array中包含特定个数并且严格按照线性序列排序的元素。因此array允许对元素进行随机访问,指向某一元素的指针可以通过偏移访问其他元素。在array内部,它只保存自己包含的元素,其他任何信息都不保存,包括自身的大小。
说白了其实array跟我们平时用的int a[100]
没啥区别。
但是array又有其好用的地方,我们这里只做了解,防止初赛出现这玩意儿。
本节内容大量引用博客:112.STL中的array ,但去掉了大部分不需要了解的内容。感兴趣的同学可以去看原文
array定义和初始化
定义array的常用方式如下所示:
array<int, 5> a;
array<int, 5> b = {1, 2, 3, 4, 5};
array<int, 5> c {{1, 2, 3, 4, 5}};//注意,不加等号的时候是双括号
通过下标访问
通过中括号和at都可以。不过array推荐使用at访问,因为使用[],array不给报错,你就没办法排查问题了。
cout<<a[0]<<endl;//不报错,给随机值
cout<<b[1]<<endl;
cout<<c[6]<<endl;//不报错,给随机值
cout<<c.at(7)<<endl;//报错
fill填充
这可能是array最令人喜欢的功能了。作用很简单,把数组都填充为某个数值。
a.fill(100);cout<<a[3];
数组的大小size
size获取数组大小,比sizeof好使
其他功能
请参考博客:112.STL中的array
vector 动态数组
定义和初始化
vector<int> a; //创建一个空数组vector<int> b(100); //创建100个元素大小的数组vector<char> c(10,'a');//创建一个10个元素的数组,元素都是avector<int> d{1,2};//创建一个2个元素的数组,元素是1和2
注意上面的小括号和大括号的区别!!!
访问数组元素 [] at
同样可以用[]和at。
数组大小 size()
数组是不是空 empty()
重置数组大小 reserve()
reserve 改变当前vecotr所分配空间的大小
添加元素到最后 push_back()
删除最后的元素 pop_back()
删除某个元素 erase(i)
erase() 函数在删除元素时,会将删除位置后续的元素陆续前移,并将容器的大小减 1。