C++11之array原理及使用

C++11中增减了array,代替原来C语言中的数组。

同时,也避免了动态数组new和delete的使用,内存自动管理。

而且,执行效率比vector高。

一 定义

在array头文件中定义:

template<
    class T,
    std::size_t N
> struct array;

如果我们自己来写一个array模板类的话,大概应该想这个样子:

template <typename T, int n>
class myArray
{
  public:
    myArray() {a = new T[n];}
    ~myArray() {delete[] a;}
    T& operator[](int i) {return *(a+i);}

  private:
    T* a;
};

二 一维数组

1 声明

array<int, 5> arr1 = {1, 2, 3, 4, 5};

或者

array<int, 5> arr1{{1, 2, 3, 4, 5}};

2 访问

例如:取数组的第一个元素

int n1 = arr1[0];
int n2 = arr1.at(0); 

3 遍历

for(size_t i = 0; i < arr1.size(); ++i)
{
	cout << arr1[0]<< endl;
	// cout << arr1.at(0)<< endl;
}

三 二维数组

1 声明

array<array<int, 3>, 2> arr2d = {11,12,13,21,22,23};

2 访问

例如:还是取第一个元素

int n3 = arr2d[0][0];

3 遍历

for(size_t i = 0; i < arr2d.size(); ++i)
{
	for(size_t j= 0; j < arr2d[i].size(); ++j)
	{
		cout << arr2d[i][j] << '\t';
	}
	cout << endl;
}

可以看到,二位数组实际上也是一个一维数组,其元素是二位数组

时间: 2024-08-06 21:28:37

C++11之array原理及使用的相关文章

4.11 IP通信原理

以太网是一种计算机局域网技术.IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线.电子信号和介质访问层协议的内容.以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如令牌环.FDDI和ARCNET. 扩展以太网的方法有在物理层扩展以太网和在数据链路层扩展以太网. 在数据链路层扩展以太网需要使用网桥, 网桥通过转发表来转发帧.转发表也称为转发数据库或路由目录. 网桥的工作原理:是通过内部的接口管理软件和网桥协议实体来完成以下操作的. (1)若网桥从接口1收

js中关于array的常用方法

最近总结了一些关于array中的常用方法, 其中大部分的方法来自于<JavaScript框架设计>这本书, 如果有更好的方法,或者有关于string的别的常用的方法,希望大家不吝赐教. 直接上代码: 1 /** 2 * 判定数组是否包含指定目标 3 * @param target 4 * @param item 5 * @returns {boolean} 6 */ 7 function contains(target,item) { 8 return target.indexOf(item)

堆排序(概念、原理、实现)

完全二叉树的定义.性质以及算法见正文,这里补充一点:完全二叉树是效率很高的数据结构,堆是一种完全二叉树或者近似完全二叉树,所以效率极高,像十分常用的排序算法.Dijkstra算法.Prim算法等都要用堆才能优化,几乎每次都要考到的二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树. 1 判断完全二叉树 完全二叉树:除最后一层外,每一层上的结点数均达到最大值:在最后一层上只缺少右边的若干结点. 2 完全二叉树定义 完全二叉树(Complete Binary Tree) 若设二叉树的深度为

[C++11笔记001]修改通用库中的XDynamicArray,使它可以支持C++11的初始化列表和for循环

今天,有空翻了一下<C++Primer plus(第六版)>,看到里面有介绍新的for循环和初始化列表,但是我实现的动态数组XDynamicArray不支持这些新特性,没办法,只好进行改造了. 首先是for循环,如下面的样式 for(auto e:stList) { cout<<e<<endl; } 是于就各种google,和查找C++11的array的源代码,总结:就是提供一个标准的iterator和begin,end这两个方法,就可以了. 是于定义了一个iterat

数组对象新增方法Array.from()、Array.of()

1. Array.from() Array.from方法用于将两类对象转为真正的数组:类数组的对象( array-like object )和可遍历( iterable )的对象(包括 ES6 新增的数据结构 Set 和Map ). let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; // ES5 的写法 var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c'] // ES

C++11 中值得关注的几大变化(网摘)

C++11 中值得关注的几大变化(详解) 原文出处:[陈皓 coolshell] 源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里.所以,我就不翻译了,我在这里仅对文中提到的这些变化"追问为什么要引入这些变化"的一个探讨,只有知道为了什么,用在什么地方,我们才能真正学到这个知识.而以此你可以更深入地了解这些变化.所以,本文不是翻译.因为写

Atitit.编译原理与概论

编译原理 词法分析 Ast构建,语法分析 语意分析 6 数据结构  1. ? 记号 2. ? 语法树 3. ? 符号表 4. ? 常数表 5. ? 中间代码 1. ? 临时文件 7 其他问题  2. ? 分析和综合 3. ? 前端和后端 4. ? 遍 5. ? 语言定义和编译器 1.3 程序设计语言的发展历程1.3.1 走向高级程序设计语言1.3.2 对编译器的影响1.3.3 1.3节的练习1.4 构建一个编译器的相关科学1.4.1 编译器设计和实现中的建模1.4.2 代码优化的科学1.5 编译

js 对Array的补充

Array.form的用法 1.可以将各种值转为真正的数组,并且还提供map功能.这实际上意味着,只要有一个原始的数据结构,你就可以先对它的值进行处理,然后转成规范的数组结构,进而就可以使用数量众多的数组方法. 2.另一个应用是,将字符串转为数组,然后返回字符串的长度.因为它能正确处理各种Unicode字符,可以避免JavaScript将大于\uFFFF的Unicode字符,算作两个字符的bug. <!DOCTYPE html> <html> <head> </h

php 多维数组 array sort 排序 :array_multisort

1.参考链接: php简单实现多维数组排序的方法 参考二: 这个链接很好,可以直接看这个:PHP array_multisort-对多个数组或多维数组进行排序 2.案例一: 1 //13: 最佳: 2 public function zjService() 3 { 4 //小组得分: 5 $team = array(); 6 //学生得分: 7 $student = array(); 8 9 //取出所有的小组: 10 $TeamModel = new TeamModel(); 11 $wher