C++11系列学习之三----array/valarray

创建数组,是程序设计中必不可少的一环。我们一般可以有以下几种方法来创建数组。

一、C++内置数组

数组大小固定,速度较快

通用格式是:数据类型   数组名[ 数组大小 ];

如 int a[40];//一维数组

  int a[5][10];//二维数组

二、vector创建数组

包含多种通用算法

长度可变,使用灵活,但效率稍低

vector是使用 new 和 delete 来管理内存的

#include <iostream>
#include <vector>
using namespace std;
int main()
{int n;cin >> n;vector<string> colors(n);cout << "array colors's length is " << colors.size();vector<int> weekdays;weekdays.push_back(2);system("pause");return 0;}
三、array

array 数组模板 ,在C++11中才支持

通用格式:array<类型名, 元素个数>  数组名;

注意,因为长度固定,这里的元素个数不能是变量。

长度固定,提供了更好、更安全的接口,执行效率和内置数组相同,可以有效替代内置数组

<pre name="code" class="cpp">include <iostream>
#include <array>   
using namespace std;void main()
{//-----------------------------------------------//--这是1维数组array<int, 5> myarray = { 1, 2, 3, 4, 5 };array<int, 5> m=myarray;//支持赋值array<int, 5> m2(myarray);//支持用一个数组去初始化另一个数组-----------------------------------------------//cout << "myarray=" << endl;//for (size_t n = 0; n < myarray.size(); n++){//	cout << myarray[n] << '\t';//}
}


 四、valarray

valarray 面向数值计算的数组,在C++11中才支持

支持很多数值数组操作,如求数组总和、最大数、最小数等。

需要头文件 valarray 支持

#include <iostream> 
#include <valarray>
using namespace std;int main()
{valarray<int> a;//长度为0valarray<double> g(10);//长度为10valarray<int> hh(a);hh = a;valarray<float> h(3.14, 10);//长度为10,每个元素为3.14int days[10]= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };valarray<int> b(days, 5);//长度为5,用数组初始化valarraycout << b.sum() << endl;//总和cout << b.max() << endl;//最大值cout << b.min() << endl;//最小值return 0;
}

五、调用第三方库,如Eigen中的

MatrixXf a(10,15);
VectorXf b(30);

下面我们重点谈一下array的用法。

Array 是一种大小固定的顺序容器。array 的申明:

template <class T, size_t N>
class array;

<pre name="code" class="cpp">#include <iostream>
#include <array>   
using namespace std;int main ()
{//-----------------------------------------------//--这是1维数组array<int,5> myarray={1,2,3,4,5};//-----------------------------------------------cout <<"myarray="<<endl;for (size_t n=0; n<myarray.size(); n++){cout << myarray[n] <<'\t';}cout << endl;//-----------------------------------------------//当然也可以使用cout <<"myarray="<<endl;for (size_t n=0; n<myarray.size(); n++){cout << myarray.at(n) << '\t';}cout << endl;//-----------------------------------------------//--这是2维数组,共3行2列array<array<int,2>,3 > myarray2D={1,2,3,4,5,6};//-----------------------------------------------cout <<"myarray2D="<<endl;for (size_t m=0; m<myarray2D.size(); m++){for (size_t n=0; n<myarray2D[m].size(); n++){  	cout << myarray2D[m][n] <<'\t';} cout << endl; }cout << endl;//-----------------------------------------------return 0;
}


 

下面我们将介绍array的几个函数:

// ‘[]’ 操作
#include <iostream>
#include <array>int main()
{std::array<int, 10> myarray;unsigned int i;// assign some values:for (i = 0; i < 10; i++) myarray[i] = i * 10;// print contentstd::cout << "myarray contains:";for (int &i : myarray)std::cout << " " << i;std::cout << std::endl;return 0;
}
结果:

myarray contains: 0 10 20 30 40 50 60 70 80 90
请按任意键继续. . .

// data 成员函数:返回指向array第一个元素的指针
#include <iostream>
#include <cstring>
#include <array>int main()
{const char* cstr = "Test string";std::array<char, 12> charray;memcpy(charray.data(), cstr, 12);std::cout << charray.data() << std::endl;return 0;
}
结果:

Test string
请按任意键继续. . .


// fill 函数,设置array内部的所有元素为指定值
#include <iostream>
#include <array>int main() {std::array<int, 6> myarray;myarray.fill(5);std::cout << "myarray contains:";for (int& x : myarray) { std::cout << " " << x; }std::cout << std::endl;return 0;
}

结果:

myarray contains: 5 5 5 5 5 5
请按任意键继续. . .
// swap 函数:交换两个array的内容,注意两个array必须是相同类型,相同大小
#include <iostream>
#include <array>int main()
{std::array<int, 5> first = { 10, 20, 30, 40, 50 };std::array<int, 5> second = { 11, 22, 33, 44, 55 };first.swap(second);std::cout << "first:";for (int& x : first) std::cout << " " << x;std::cout << std::endl;std::cout << "second:";for (int& x : second) std::cout << " " << x;std::cout << std::endl;return 0;
}

结果:

first: 11 22 33 44 55
second: 10 20 30 40 50
请按任意键继续. . .
下面我们再说说以上array、vector、valarray的区别。

本质上,vector与valarray是相同的,基本上将vector换成valarray即可。无非是valarray侧重于数值运算,因此增加了max,min,sum等函数。

而array与内置数组很接近,它的个数是事先给定的,不能更改。只不过是array更容易操作而已,也不用管理内存。

比如:我们想要动态创建二维数组,vector可以,但array不可以。

// swap 函数:交换两个array的内容,注意两个array必须是相同类型,相同大小
#include <iostream>
#include <array>
#include <vector>
using namespace std;
int main()
{int m = 5, n = 6;std::array < array<int, 5>, 6 > a ;vector<vector <int> > ivec;ivec.resize(m, vector<int>(n));return 0;
}

当我们将
std::array < array<int, 5>, 6 > a ;
换成

std::array < array<int, m>, n > a ;
出错。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验7综合练习

一、填空&#xff1a;阅读下列程序说明和程序&#xff0c;在可选答案中&#xff0c;挑选一个正确答案。填补(1) (2) (3) (4)处空白&#xff0c;并注释说明为什么。 程序说明 求 1 2/3 3/5 4/7 5/9 … 的前15项之和。 运行示例&#xff1a; sum 8.667936 程序如下&#x…

计算机专业课的教学准备,计算机专业课程教学中的分层教学模式

《计算机专业课程教学中的分层教学模式》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《计算机专业课程教学中的分层教学模式(5页珍藏版)》请在人人文库网上搜索。1、编号&#xff1a;XXXX时间&#xff1a;2021年x月x日Error! No text of specified style in documen…

angular-过滤器

过滤器描述currency格式化数字为货币格式。filter从数组项中选择一个子集。lowercase格式化字符串为小写。orderBy根据某个表达式排列数组。uppercase格式化字符串为大写。内容中&#xff1a;数值转为货币格式 <p>总价 {{ (quantity * price) | currency }}</p> 排…

SSH三大框架的工作原理及流程

Hibernate工作原理及为什么要用? 原理&#xff1a; 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xml中的<mapping resource"com/xx/User.hbm.xml"/>读取并解析映射信息 3.通过config.buildSessionFactory();/…

二分查找法(递归与循环实现)

问题&#xff1a; 给定一个排序数组和一个数k&#xff0c;要求找到第一个k的位置和最后一个k的位置 解析&#xff1a; 由于给定的数组是从小到大排序的&#xff0c;故可以按照二分查找法来找&#xff0c;下面分别从递归和循环两种方法来阐述&#xff1a; //递归方法 int GetF…

电脑显示器变色_电脑维修(看完后就可以开一家自己的电脑维修店!)

第二部分 常见故障判断本部分将计算机从开机一直到关机期间的故障进行分类。每一类的判断、定位过程都是第一部分中维修判断一节的有机组成部分&#xff0c;即不论使用什么方法或不论去判断什么内容&#xff0c;这两部分总是相互结合使用的。以下各故障类型中所列的故障现象只是…

linux运维基础篇 unit7

unit 71.进程定义进程就是cpu未完成的工作2.ps命令psa ##关于当前环境的所有进程x ##与当前环境无关的所有进程f ##显示进程从属关系e ##显示进程调用环境工具的详细信息l ##长列表显示进程的详细信息u ##显…

运行快捷指令无法连接服务器失败,快捷指令打不开怎么回事?iPhone快捷指令无法载入的解决办法...

经常会有果粉朋友反馈&#xff0c;自己的 iPhone 快捷指令打不开。具体表现是&#xff0c;在 Safari 浏览器中&#xff0c;打开快捷指令下载安装页面&#xff0c;点击“获取捷径”后&#xff0c;一直卡在快捷指令中心正在载入页面&#xff0c;等半天都无法正常载入需要安装的快…

Bigpipe---FaceBook使用的页面加载技术

BigPipe&#xff08;FaceBook使用的页面加载技术&#xff09; 理论部分&#xff1a;用户输入域名发送请求到服务端&#xff0c;服务端组合出需要的业务数据返回给客户端&#xff0c;这一过程是现在网页请求最基本传统的方式了。 好处&#xff1a;只做了一次http请求&#xff0c…

maven搭建多模块项目和管理

在eclipse下构建maven项目&#xff0c;该项目由多个子模块组成。 1.创建一个父项目 NEW -->project-->maven-->maven Project&#xff0c;点击下一步&#xff0c;进入new maven Project的Select project name and location界面 &#xff0c;什么也不做&#xff0c;直接…

shsh验证服务器,教你从Cydia上取出SHSH并验证有效性!

原标题&#xff1a;教你从Cydia上取出SHSH并验证有效性&#xff01;今天在第一篇内容中和大家说了如何让32位设备进行降级&#xff0c;但这其中有个很重要的问题就是如何提取出对应设备的SHSH&#xff0c;虽然说本篇内容并不是对所有人都有效&#xff0c;但至少多了一个可选择的…

Discuz!$_G变量的使用方法

1&#xff0c;G变量的使用方法&#xff1a;例如&#xff1a;$_G[style][boardlogo]风格变量篇$_G[style] > Array(官方模板区 cr180整理$_G[style][styleid] > 当前风格ID$_G[style][name] > 当前风格名$_G[style][templateid] > 当前模板体系$_G[style][tpldir] &…

n!后面有多少个0(转载)

我的思路&#xff1a; 从”那些数相乘可以得到10”这个角度&#xff0c;问题就变得比较的简单了。 首先考虑&#xff0c;如果N的阶乘为K和10的M次方的乘积&#xff08;N&#xff01;K∗10M&#xff09;&#xff0c;那么N!末尾就有M个0。 如果将N的阶乘分解后&#xff0c;那么…

ico的尺寸_批量压缩、加水印、调整尺寸……用这 6 款 Mac 图片工具一键解决

不论是写文章、做教程&#xff0c;还是处理摄影作品、上传社交平台&#xff0c;对图片的处理肯定少不了。庞大又贵重的专业软件不仅成本较高&#xff0c;还有着不小的上手难度。如果我们仅仅是想要&#xff1a;缩小图片体积、添加水印或者批量对图片进行操作等等&#xff0c;使…

转:MAC 下安装PHONEGAP开发环境

MAC 下安装PHONEGAP开发环境 什么是Phonegap呢&#xff1f;Phonegap是一个利用HTML5去开发App的框架。可以为安卓、iOS、WP、黑莓、火狐等移动操作系统。采用HTML5来编写交互界面。其优点是编写一次可以编译到各种移动平台上&#xff0c;大大为公司节省了开发周期。但是它也是有…

Sql 行转列问题总结

1、行转列---1、最简单的行转列 /* 问题&#xff1a;假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94想变成(得到如下结果)&#xff1a; 姓名 语文 数学 物理 李四 74 84 94 张三 74 8…

寻找第K大的数字

寻找第k大的数字&#xff0c;有很多方法&#xff0c;最基本的就是将数组按照从大到小的顺序排列&#xff0c;找出第k个元素即可。但是这种方法的时间复杂度为o(nlog(n)),我们还能找到更好地方法。下面我们将介绍另外两种办法&#xff0c;一种是基于快排Partition的方法&#xf…

(12)MSP430F5529 常用内置函数和一些说明

&#xff08;1&#xff09; MSP430F5529支持最高工作频率为25MHZ&#xff0c;也就是说你通过 锁相环倍频来提高系统运行速度是有一个限制的&#xff0c; 最高只能到25MHZ&#xff08;再高没意思了&#xff09;。 &#xff08;2&#xff09;几个重要的内联函数 &#xff08;内联…

从零开始学android编程_android初学者的入门秘籍

大概是去年年底开始接触android原本是学习嵌入式的我&#xff0c;领导让我看看能不能搞一下这个android APP。一开始的我懵逼得很。。。这android APP 不是得用java写吗&#xff1f;&#xff1f;&#xff1f; 现在我看网上说比较多还是用kotlin&#xff0c;没去学。。。好家伙&…

修改了sql默认路径无法登录服务器,PostgreSQL错误'无法连接到服务器:没有这样的文件或目录'...

像其他一些人一样,当我在我的项目中运行rake db:migrate或者甚至为我的Ruby on Rails 3.2应用程序尝试大多数数据库任务时,我收到此错误.PGError(无法连接到服务器:没有这样的文件或目录.服务器是否在本地运行并接受Unix域套接字上的连接"/tmp/.s.PGSQL.5432"&#x…