【C++】C转C++学习记录.DAY3

引子

DAY3概括地对容器进行补充学习,包括它的类型和操作。之后总结了这两天刷题时用到的新的知识。
![在这里插入图片描述](https://img-blog.csdnimg.cn/caba9368bb764a53bee3b5b076d63b32.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATm9uZTA3Mg==,size_20,color_FFFFFF,t_70,g_se,x_16

1.顺序容器

1.1顺序容器类型

类型详情见最上方思维导图,在此不过多赘述。

  1. string和vector将元素保存在连续的内存空间中,能够使用下标进行快速的随机访问,但是在中间添加或删除元素非常耗时。
  2. list和forward_list与上述互补,即令任何位置的添加和删除操作变得快速,但是不支持元素的随机访问。且forward_list没有size操作。
  3. deque与vector类似,但是它在两端的添加或删除操作很快。
  4. array的大小是固定的,不支持添加和删除操作。

1.2容器操作

常见操作详见DAY1,下面进行一些补充

成员含义
c.back()返回c中尾元素的引用
c.front()返回c中首元素的引用
a.swap(b) 等价于 swap(a, b)交换a和b的元素
c.emplace(inits)使用inits构造c中的一个元素
c.erase(args)删除args指定的元素
c.clear()删除c中的所有元素,返回void
c.pop_back()删除c中尾元素
c.pop_front()删除c中首元素
c.erase(p)删除迭代器p所指定的元素,返回一个指向被删元素之后元素的迭代器
c.erase(b, e)删除迭代器b和e范围内的元素,返回一个指向最后一个被删元素之后元素的迭代器
插入操作含义
c.push_front(t)在c的头部创建一个值为t或由args创建的元素
c.emplace_front(args)
c.insert(args)将args中的元素拷贝进c
c.insert(p, t)在迭代器p指向的元素之前创建一个值为t或由args创建的元素,返回指向新添加元素的迭代器
c.emplace(args)
c.insert(p, n, t)在迭代器p指向的元素之前插入n个值为t的元素,返回指向新添加的第一个元素的迭代器,若范围为空,则返回p
c.insert(p, b, e)将迭代器b和e指定的范围内的元素插入到迭代器p指向的元素之前,b和e不能指向c中的元素,返回指向新添加的第一个元素的迭代器,若范围为空,则返回p
c.insert(p, il)il是一个花括号包围的元素值列表,将这些定值插入到迭代器p指向的元素之前,返回指向新添加的第一个元素的迭代器,若范围为空,则返回p

注:

  • 所有容器都支持相等或不等运算符;
  • vector和string不支持push_front和emplace_front
  • forward_list不支持push_back和emplace_back
  • array不支持这些操作
  • 向一个vector、string和deque插入元素会使所有指向容器的迭代器、引用和指针失效。

迭代器:详见DAY2,其中,forward_list迭代器不支持递减运算符,并且DAY1中所列举的算术运算只能应用于string、vector、deque和array的迭代器。
迭代器范围:由一对迭代器表示,通常称为begin和end,迭代器范围中的元素包含begin所表示的元素以及begin和end之间所有的元素(end指向尾元素之后的位置),这种元素范围称为左闭合区间。
因此可以用如下的代码用循环来处理一个元素范围:

while(begin != end){
	*begin = val;
	++begin;
}

关于list和forward_list的操作,可以看这篇博客https://blog.csdn.net/u013006553/article/details/78158717

1.3容量

操作含义
c.resize(n)调整c的大小为n个元素
c.resize(n, t)调整c的大小为n个元素, 任何新添加的元素都初始化为值t
c.capacity()不重新分配内存空间的话,c可以保存多少元素
c.reserve(n)分配至少能容纳n个元素的内存空间

2.容器适配器

除了顺序容器,标准库还定义了三个顺序容器适配器:栈适配器stack、队列适配器queue和priority_queue。

栈适配器新操作含义
s.pop()删除栈顶元素
s.push(item)压栈
s.top()返回栈顶元素
队列适配器新操作含义
q.pop()返回queue的首元素或priority_queue的最高优先级的元素
q.front()返回首元素或尾元素
q.back()只适用于queue
q.top()返回最高优先级元素,只适用于priority_queue
q.push(item)在queue末尾或priority_queue中恰当的位置创建一个元素

3.关联容器

联容器中的元素是根据关键字储存的,支持普通容器操作,但是不支持顺序容器位置相关的操作。
具体内容将在DAY4中更新。

4.intersect()求交集

c=intersect(a,b)找出向量a与b的相同元素,并按升序返回到c中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值