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循环的更多相关文章

  1. C++ Arrays, std::array, std::vector 总结

    原文来自: https://shendrick.net/Coding%20Tips/2015/03/15/cpparrayvsvector.html @Seth Hendrick Original a ...

  2. C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲

     使用C++风格的数组.不须要管理内存. array要注意不要溢出,由于它是栈上开辟内存. array适用于不论什么类型 #include<iostream> #include< ...

  3. C++基于范围的for循环性能测试(针对std::vector)

    1.代码如下: void output1(int x){ if (x == 10000000) { std::cout << x << std::endl; } }const ...

  4. C++ std::array

    std::array template < class T, size_t N > class array; Code Example #include <iostream> ...

  5. 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++> 给出排序好的 ...

  6. C++语言中std::array的神奇用法总结,你需要知道!

    摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...

  7. c++编译错误C2971:"std::array":array_size:包含非静态存储不能用作废类型参数;参见“std::array”的声明

    在Qt5中这段代码编写有两种方式:一个编译成功,一个失败 成功版本: static constexpr size_t block_size = 0x2000;//8KB static constexp ...

  8. std::array中的std::get<n>()

    模板函数std::get<n>()是一个辅助函数,它能够获取到容器的第 n 个元素.模板参数的实参必须是一个在编译时可以确定的常量表达式,编译时会对它检查. get<n>()模 ...

  9. 将std::array转换成std::tuple

    template<typename Array, std::size_t... Index> decltype(auto) array2tuple_impl(const Array& ...

随机推荐

  1. Spring IoC 详解(四)

    Spring IoC 概述 IoC:Inverse of Control(控制反转) 为了更好的理解用可以这样通俗易懂的这样讲:IOC主要是说是new一个类来使用,方式分为:开发这手动创建和Sprin ...

  2. vue.js移动端app:初始配置

    本系列将会用vue.js2制作一个移动端的webapp单页面,页面不多,大概在7,8个左右,不过麻雀虽小,五脏俱全,常用的效果如轮播图,下拉刷新,上拉加载,图片懒加载都会用到.css方面也会有一些描述 ...

  3. 数据库开启最小补充日志hang住

    一.场景说明: 客户环境需要部署OGG,同事在数据库中执行添加最小补充日志,会话Hang住 二.环境测试 本次测试环境进行模拟,添加最小补充日志的操作,怎么会被Hang住呢? 2.1 模拟会话hang ...

  4. 【SQL Server性能优化】删除大量数据的方法比较

    原文:[SQL Server性能优化]删除大量数据的方法比较 如果你要删除表中的大量数据,这个大量一般是指删除大于10%的记录,那么如何删除,效率才会比较高呢? 而如何删除才会对系统的影响相对较小呢? ...

  5. 日志(log4j)

    log4j测试代码如下: package com.learn.test; import org.apache.log4j.Logger; public class Test { public stat ...

  6. Asp.Net Core 轻松学系列-4玩转配置文件

    目录 前言 另类方式使用 hosting.json 使程序运行于多个端口 结语 前言     在 .NET Core 项目中,配置文件有着举足轻重的地位:与.NetFramework 不同的是,.NE ...

  7. Go 代码风格和规范

    Go 语言写起来类似于C语言,因此熟悉C语言及其派生语言(C++.C#.Objective-C 等)的人都会迅速熟悉这门语言 编码风格 标识符命名规范 在习惯上,Go语言程序员推荐使用驼峰式命名,当名 ...

  8. Mysql 中删除重复数据(保留一条)

    sql去重 先根据需要去重的字段进行分组,取到主键值最小的记录(id 是主键,删除重复的 record_id 的记录) select min(id) from tb_traffic_wf_record ...

  9. ElasticSearch做实时OLAP框架~实时搜索、统计和OLAP需求,甚至可以作为NOSQL来使用(转)

    使用ElasticSearch作为大数据平台的实时OLAP框架 – lxw的大数据田地 http://lxw1234.com/archives/2015/12/588.htm 一直想找一个用于大数据平 ...

  10. web中间件

    0x00 Web中间件概述 通俗来说,中间件是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通.Apache的Tomcat.IBM公司的WebSphere.BEA公司的WebLogic ...