std::array,std::vector,基于范围的for循环
std::array 除了有传统数组支持随机访问、效率高、存储大小固定等特点外,还支持迭代器访问、获取容量、获得原始指针等高级功能。而且它还不会退化成指针T *给开发人员造成困惑。
std::vector 向量容器,尾部单端扩容(容量不够,2倍扩容),所以只有push_back,没有push_front。

forward-list 单向链表,头部单端扩容(容量不够,扩充1个节点),只有push_front,没有push_back。

list 双向链表,两端扩容(容量不够,扩充1个节点)。
deque 双向队列,两端扩容(容量不够,2倍扩充),元素是放在buffer里的(元素个数最多=512字节/元素类型所占字节数,个),deque是下图的map(理解为中心枢纽),buffer在别的地方,map每格指向1个buffer。buffer满了,增加1个新buffer,占用deque 1格,当格占满了,2倍扩充格子。

以上5个容器,vector对空间浪费比较严重(2倍扩容,2*已满容量),forward-list、list最节省空间(每次扩1个节点)
【栈与队列】栈与队列本质上是使用了双向队列的部分功能。
stack栈,先进后出

queue队列,先进先出

双向队列,两端进出

for( 元素名变量 : 广义集合) { 循环体 }
a.“元素名变量”可以是引用类型,以便直接修改集合元素的值;
b. “元素名变量”也可以是const类型,避免循环体修改元素的值
c. 其中“广义集合”就是“Range(范围)”,是一些元素组成的一个整体
基于范围的循环仅限于for语句,do…while(); 和while(){} 不支持基于范围的循环。
#include<iostream>
#include<array> //引入
#include<vector> //引入
using namespace std; int main(){
int a[]{, , , };//旧的定义方式
array<int, > a2 ={ , , , };
vector<int> v ={ , , };
vector<string> s = { "hello", "world", "!" };
for (auto i:a2)
{
cout << i << endl;
}
for (auto &i:a2)//引用,改变每个元素,2倍
{
i = i * ;
}
for (auto i : a2)
{
cout << i << endl;
} return ;
}
【参考】
https://blog.csdn.net/thinkerleo1997/article/details/80415059 C++11:尽量使用std::array来代替数组
https://blog.csdn.net/SENLINZM/article/details/38682233 C++11 array使用详解
std::array,std::vector,基于范围的for循环的更多相关文章
- C++ Arrays, std::array, std::vector 总结
原文来自: https://shendrick.net/Coding%20Tips/2015/03/15/cpparrayvsvector.html @Seth Hendrick Original a ...
- C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲
使用C++风格的数组.不须要管理内存. array要注意不要溢出,由于它是栈上开辟内存. array适用于不论什么类型 #include<iostream> #include< ...
- C++基于范围的for循环性能测试(针对std::vector)
1.代码如下: void output1(int x){ if (x == 10000000) { std::cout << x << std::endl; } }const ...
- C++ std::array
std::array template < class T, size_t N > class array; Code Example #include <iostream> ...
- LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++>
LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++> 给出排序好的 ...
- C++语言中std::array的神奇用法总结,你需要知道!
摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...
- c++编译错误C2971:"std::array":array_size:包含非静态存储不能用作废类型参数;参见“std::array”的声明
在Qt5中这段代码编写有两种方式:一个编译成功,一个失败 成功版本: static constexpr size_t block_size = 0x2000;//8KB static constexp ...
- std::array中的std::get<n>()
模板函数std::get<n>()是一个辅助函数,它能够获取到容器的第 n 个元素.模板参数的实参必须是一个在编译时可以确定的常量表达式,编译时会对它检查. get<n>()模 ...
- 将std::array转换成std::tuple
template<typename Array, std::size_t... Index> decltype(auto) array2tuple_impl(const Array& ...
随机推荐
- Hystrix的介绍(断路、降级)
在大中型分布式系统中,通常系统很多依赖(HTTP,hession,Netty,Dubbo等),如下图: 在高并发访问下,这些依赖的稳定性与否对系统的影响非常大,但是依赖有很多不可控问题:如网络 ...
- WUSTOJ 1290: 01字串(Java)
题目链接:
- (转)从0移植uboot (四) _点亮调试LED
这一节主要讨论1个问题:点灯.点灯是实际开发中,特别是裸板开发中常见的调试手段,相当于主机开发中漫天飞舞的printf/printk.为了追踪程序的现场执行情况,很多时候我们都使用点一个灯的方法来进行 ...
- uboot中打开 debug调试信息的方法
在uboot目录下include/common.h中, 原理:只需要让 _DEBUG 的值为 1即可. 最简单的做法就是在下图第一行之前添加 #define DEBUG
- ASP.NET MVC或者.net Core mvc 页面使用富文本控件的 保存问题
https://blog.csdn.net/leftfist/article/details/69629394 目前在做的项目存在XSS安全漏洞! 原因是有一些页面使用了富文本编辑框,为了使得其内容可 ...
- mysql8中查询语句表别名不能使用 “of”
今天在迁移一个项目的时候,发现有一个sql报错,但是语句跟迁移之前完全一样,所以想来应该是 mysql 版本差异导致的. 迁移之前版本:5.6.28(腾讯云) 迁移之后版本:8.0.16(阿里云) 新 ...
- Python之定义默认参数
定义函数的时候,还可以有默认参数. 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') 123 > ...
- zabbix-自定义监控项
一.自定义一个监控项 模板虽好,但是不能解决所有的监控,有些需要的监控项在模板中并没有,需要我们自己定义一个监控项,如何定义一个监控项呢?大概的流程是这样的几步 .在插件配置文件中定义一个key/va ...
- JDK8 dockerfile
# AlpineLinux with a glibc-2.28-r0 and Oracle Java 8FROM hub.devops.docker.com/library/alpine-glibc: ...
- linux修改文件系统注册设备