C++11常用特性介绍——array容器
std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中。
一、概要
array是C++11新引入的容器类型,与内置数组相比,array是一种更容易使用,更加安全的数组类型,可替代内置数组,作为数组升级版,继承数组最本特性,同时融入部分操作。
二、定义与初始化
array和数组一样,为固定大小容器类型,定义时即需声明大小与类型
1)内置数组初始化
int array[10] = {0};
int array[10] = {1,2,3,4,5,6,7,8,9,0};
int array[] = {1,2,3,4,5,6,7,8,9,0};
int array[10] = {1,2,3};//后面的7个数据的值在Qt上会被随机
注:数组的初始化不能直接使用赋值,只能通过遍历的形式拷贝
2)array的初始化
std::array<int,10> a = {1,2,3,4,5,6,7,8,9,0};
std::array<int,10> a{1,2,3,4,5,6,7,8,9,0};
std::array<int,10> a{1,2,3};//后面的7个数据的值在Qt上会初始化为0
int arr[10]{10,9,8,7,6,5,4,3,2,1};
std::array array<int,10>;
memcpy(array.data(),arr,sizeof(arr));//拷贝初始化
array.fill(5);//填充初始化(所有数据初始化为5)
array = arr;//赋值初始化
三、访问
1)内置数组的访问:下标、指针和迭代器
int array[10] = {1,2,3,4,5,6,7,8,9,0};
int value = array[0];//通过下标获取数组的第一个元素
int value = *p; //通过指针获取数组的第一个元素
for(int *i=bebin(array);i != end(array);i++)//C++11中为了给数组提供更加安全的访问方式,引入了begin()和end()函数
{
std::cout << *i << " ";
}
std::cout << std::endl;
2)array的访问:下标、at、指针和迭代器
std::array<int,10> array{1,2,3,4,5,6,7,8,9,0};
//下标访问
for(std::size_t i=0;i<array.size();i++)
{
std::cout << array[i] << " ";
}
std::cout << std::endl;
//font、at、back访问
for(std::size_t i=0;i<array.size();i++)
{
std::cout << array.at(i) << " ";
}
std::cout << std::endl;
//正向、反向、常量迭代器:begin、cbegin、rbegin、crbegin、end、cend、rend、crend
std::array<int,10>::iterator iter;
for(iter=array.begin;iter != array.end();iter++)
{
std::cout << *iter << " ";//迭代器访问
}
std::cout << std::endl;
//指针:data
int arr[10]{10,9,8,7,6,5,4,3,2,1};
std::array array<int,10>;
memcpy(array.data(),arr,sizeof(arr));
for(std::size_t i=0;i<array.size();i++)
{
std::cout << array[i] << " ";/./输出:10 9 8 7 6 5 4 3 2 1
}
std::cout << std::endl;
array是数组的升级版,将数组正式纳入到容器范畴,array在使用和性能上都要强于内置数组,对于固定大小的使用场景,可用array替代数组工作。
尽量使用at方法来访问元素,因为运算符[]不会对索引值进行检查,像array[-1]是不会报错的。使用at()将在运行期间捕获非法索引的,默认将程序中断。
C++11常用特性介绍——array容器的更多相关文章
- C++11常用特性介绍——auto类型修饰符
1.C++11常用特性介绍 从本篇开始介绍C++11常用特性,大致分:关键字及新语法.STL容器.多线程.智能指针内存管理,最后讲一下std::bind和std::function 二.关键字和新语法 ...
- C++11常用特性介绍——列表初始化
一.列表初始化 1)C++11以前,定义初始化的几种不同形式,如下: int data = 0; //赋值初始化 int data = {0}; //花括号初始化 int data(0); / ...
- C++11常用特性介绍——Lambda表达式
一.C++11采用配对的方括号[]来创建一个匿名函数并执行,如: #include <iostream> int main() { auto func = []{ std::cout &l ...
- C++11常用特性介绍——decltype关键字
一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在 ...
- C++11常用特性介绍——左值引用、右值引用
一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是 ...
- C++11常用特性介绍——for循环新用法
一.for循环新用法——基于范围的for循环 for(元素类型 元素对象 : 容器对象) { //遍历 } 1)遍历字符串 std::string str = "hello world&qu ...
- C++11常用特性介绍——constexpr变量
一.constexpr变量 1)将变量声明为constexpr类型以便由编译器来验证变量的值是否为一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化,如: in ...
- C++11常用特性介绍——nullptr关键字及用法
一.nullptr关键字及用法 1)NULL的二义性 void func(int) {} void func(int*) {} 当函数调用func(NULL)时会执行哪个函数呢? 先看C++对NULL ...
- 【转】C++11常用特性的使用经验总结
出处 http://www.cnblogs.com/feng-sc C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++11方 ...
随机推荐
- linux 下查看Tomcat的状态,以及开启停止服务命令
1.首先进入你的tomcat 的bin目录下 cd /你的安装目录/tomcat/bin 查看服务启动情况 ps -ef|grep java 此条命令具体含义 ps:将某个进程显示出来 -A 显示所有 ...
- mysql的数据库开放权限
链接数据库之后运行下面的命令即可 grant all PRIVILEGES on *.* to %username%@'%' identified by '%password%'; 如给root链接数 ...
- 2.1 【配置环境】 JDK + eclipse + selenium
1.jdk以及eclipse的具体安装详见 http://www.cnblogs.com/ericazy/p/6082194.html 安装1.7 jdk即可 2.selenium 旧版本安装: s ...
- 【Python】第一个程序---Helloworld!
对于大多数程序语言,第一个入门编程代码便是"Hello World!",以下代码为使用Python输出"Hello World!": #!/usr/bin/py ...
- 洛谷 P3901 数列找不同(莫队)
题目链接:https://www.luogu.com.cn/problem/P3901 这道题简单莫队模板题,然后$add$和$del$分别处理$vis[]$从$0-->1$和从$1--> ...
- WinForm程序打包教程
准备工作 1. 编写完成的WinForm程序 2. 安装部署项 VS2010中有一个自带的安装部署项目,叫:Visual Studio Installer ,通常称为:setup项目,是一个用于自定义 ...
- 查看KVM宿主机上虚拟机的IP的脚本
查看KVM宿主机上虚拟机的IP的脚本 #!/bin/bash #Auth:liucx #ping当前网段内在线的主机,以便产生arp记录. .{..};do { >& }& do ...
- 一周搞定模拟电路P2_二极管介绍_记录
1 稳压二极管 1.1 稳压二极管伏安特性曲线 ΔIz 这一段为能够达到比较好的稳压效果的稳压电流. 1.2 两种连接方法的比较 2 整流二极管 2.1 特点 用于把交流电变成脉动直流电 3 开关二极 ...
- if的特性
js中 if(变量),这个变量只要满足: 变量如果不为0,null,undefined,false,都会被处理为true.只要变量有非0的值或是某个对象,数组,字符串,都会认为true
- Bugku-CTF加密篇之告诉你个秘密(ISCCCTF)
告诉你个秘密(ISCCCTF) 636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A5 ...