ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C++ - 了解STL的数据容器

C++ - 了解STL的数据容器

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;//报错

image

fill填充

这可能是array最令人喜欢的功能了。作用很简单,把数组都填充为某个数值。

a.fill(100);cout<<a[3];

数组的大小size

size获取数组大小,比sizeof好使

image

其他功能

请参考博客: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。

清空 clear()

返回列表