C++学习笔记13:数组
2021/9/22 20:45:46
本文主要是介绍C++学习笔记13:数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
数组(array)是一种数据格式,能够存储多个同类型的值。使用数组声明创建数组时,应指出以下三点:
- 存储在每个元素中的值的类型;
- 数组名;
- 数组中的元素数(必须是整型常数、或 const 值、或常量表达式)。
声明数组的通用格式如下:
typeName arrayName[arraySize];
单独访问数组元素:使用下标或索引来对元素进行编号,C++数组从0开始编号,使用带索引的方括号表示法来指定数组元素。
下面的程序说明了数组的一些属性,包括声明数组、给数组元素赋值以及初始化数组。
//arrayone.cpp -- small arrays of integers 整型数组示例 #include <iostream> using namespace std; int main() { int yams[3]; //创建包含3个元素的整型数组 //为数组的每个元素赋值 yams[0] = 7; yams[1] = 8; yams[2] = 6; int yamcosts[3] = { 20,30,5 }; //创建并初始化一个3元素整型数组 cout << "Total yams = "; cout << yams[0] + yams[1] + yams[2] << endl; cout << "The package with " << yams[1] << " yams costs "; cout << yamcosts[1] << " cents per yam.\n"; int total = yams[0] * yamcosts[0] + yams[1] * yamcosts[1]; total = total + yams[2] * yamcosts[2]; cout << "The total yam expense is " << total << " cents.\n"; cout << "\nSize of yams array = " << sizeof yams << " bytes.\n"; cout << "Size of one element = " << sizeof yams[0] << " bytes.\n"; return 0; }
数组的初始化规则:
- 只有在定义数组时才能使用初始化,此后就不能使用了(可以利用下标分别给数组中的元素赋值),也不能将一个数组赋给另一个数组。
- 初始化数组时,提供的值可以少于数组的元素数目。如果只对数组的一部分进行初始化,则编译器将把其他元素设置为 0。
- 如果初始化数组时方括号([ ])内为空,C++编译器将计算元素个数。
C++11数组初始化方法:
在C++11中,数组使用列表初始化的一些新功能:
- 初始化数组时,可省略等号(=);
- 可不在大括号内包含任何东西,这将把所有元素都设置为零;
- 列表初始化禁止缩窄转换。
数组的替代品:
一、模板类 vector
首先,要使用 vector 对象,必须包含头文件 vector,其次,vector 包含在名称空间 std 中,因此可使用 using 编译指令、using 声明或 std::vector。一般而言,下面的声明创建一个名为 vt 的 vector 对象,它可以存储 n_elem 个类型为 typeName 的元素:
vector<typeName> vt(n_elem);
其中,参数 n_elem 可以是整型常量,也可以是整型变量。
二、模板类 array
首先,要使用 array 对象,必须包含头文件 array,其次,array 也包含在名称空间 std 中,因此可使用 using 编译指令、using 声明或 std::array。一般而言,下面的声明创建一个名为 arr 的 array 对象,它可以存储 n_elem 个类型为 typeName 的元素:
array<typeName, n_elem> arr;
其中,参数 n_elem 不能是变量。
下面的程序展示了一些数组、vector 对象和 array 对象的相似和不同之处。
//choices.cpp -- 数组、vector对象、array对象 #include <iostream> #include <vector> #include <array> using namespace std; int main() { // C, original C++ double a1[4] = { 1.2,2.4,3.6,4.8 }; // C++98 STL -- 创建vector对象 vector<double> a2(4); a2[0] = 1.0 / 3.0; a2[1] = 1.0 / 5.0; a2[2] = 1.0 / 7.0; a2[3] = 1.0 / 9.0; // C++11 -- 创建并初始化array对象 array<double, 4> a3 = { 3.14,2.72,1.62,1.41 }; array<double, 4> a4; a4 = a3; //可以将一个array对象赋给另一个array对象,前提是二者类型、元素数量一致,而数组只能逐元素复制数据 // use array notation 无论是数组、vector对象还是array对象,都可以利用数组表示法访问元素 cout << "a1[2]: " << a1[2] << " at " << &a1[2] << endl; cout << "a2[2]: " << a2[2] << " at " << &a2[2] << endl; //vector对象存储在另一个区域(自由存储区或堆)中 cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl; //array对象和数组存储在相同的内存区域(即栈)中 cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl; // misdeed 错误行为 a1[-2] = 20.2; //索引-2等于 *(a1-2) = 20.2; 含义:找到a1指定的地方,向前移两个double元素,并将20.2存储到目的地,即将信息存储到数组外面(越界错误) cout << "a1[-2]: " << a1[-2] << " at " << &a1[-2] << endl; cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl; cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl; return 0; }
这篇关于C++学习笔记13:数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25安卓NDK 是什么?-icode9专业技术文章分享
- 2024-12-25caddy 可以定义日志到 文件吗?-icode9专业技术文章分享
- 2024-12-25wordfence如何设置密码规则?-icode9专业技术文章分享
- 2024-12-25有哪些方法可以实现 DLL 文件路径的管理?-icode9专业技术文章分享
- 2024-12-25错误信息 "At least one element in the source array could not be cast down to the destination array-icode9专业技术文章分享
- 2024-12-25'flutter' 不是内部或外部命令,也不是可运行的程序 或批处理文件。错误信息提示什么意思?-icode9专业技术文章分享
- 2024-12-25flutter项目 as提示Cannot resolve symbol 'embedding'提示什么意思?-icode9专业技术文章分享
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享