C++入门-数组

简介: 素组是一种数据格式,能储存多个同类型的值。

创建和使用数组

素组是一种数据格式,能储存多个同类型的值。创建数组需要声明以下三点:

  • 储存在每个元素中的值的类型
  • 数组名
  • 数组中的元素

例如:

short months[12]
typeName arrayName[arraySize]

作为复合类型的数组:数组之所以被称为复合类型,是因为他是使用其他类型创建的(C语言使用术语“派生类型”,但是由于C++对类关系使用术语“派生”所以使用复合类型来描述数组)。不能仅仅将某种东西声明为数组, 它必须有特定的类型。没有通用数组类型,但是存在很多特定的数组类型,如char数组或者long数组。如float array[20]的类型不是数组,而是“float数组”。


数组的很多用途基于以下事实


可以单独访问数组元素,方法是使用下标或者索引来对元素进行编号。


C++的素组从0开始编号。Pascal和BASIC用户需要改变习惯了。


C++使用带索引的方括号表示法来指定素组元素。例如months[0]是months数组的第一个元素。


总结:数组可以使用声明创建大量的变量。


有效下标的重要性:编译器不会检查下标是否有效。在程序运行后,这种错误的赋值可能引发问题,它可能破坏数据或者代码,也可能导致程序异常终止。所以必须保证程序的下标有效。


以下代码说明了一些数组的属性:

#include<iostream>
int main()
{
    using namespace std;
    int yams[3];
    yams[0] = 7;
    yams[1] = 8;
    yams[2] = 6;
    int yamcosts[3] = {20,  30, 5};
    cout << "Total tams = " <<endl;
    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] * yams[2];
    cout << "The total  yam expense is " << total << " cents.\n";
    cout << "\nSize of yams array = " << sizeof yams;
    cout << "bytes.\n";
    cout << "Size of one element = " << sizeof yams[0];
    cout<< "bytes.\n";
    return 0;
}
/*
output:

前面的不做说明,最后两行会输出

Size of yams array = 12 bytes
Size of one element = 4 bytes

聪明的你肯定知道为什么吧

*/

数组初始化规则

C++有几条关于初始化数组的规则, 他们限制初始化的时刻,决定数组元素数目与初始化器中值的数目不相同时将发生的情况。


  • 只有在定义数组的时候才能使用初始化,此后不能使用且不能将一个数组赋值给另外一个数组
int cards[4] = {1, 2, 3, 4}
int hand[4];
hand[4] = {5, 6, 7, 8};//not allowed
hand = cards//not allowed

然而,可以使用下标分别给数组中的元素赋值

  • 初始化时,提供的值可以少于数组中的元素数目。例如只初始化数组的前两个值
float hotelTips[5] = {2.3,3.2};

如果只对数组的一部分初始化,则编译器将把其他元素设置为0,因此想要将数组中的所有元素都初始化为0非常简单--只要显式将第一个元素初始化为0,然后让编译器将其他元素初始化为0

long totals[500] {0};

如果初始化为{1},则第一个元素为1,其他都为0

如果[]内为空,C++编译器会自动计算元素个数例如

short things[] = {1, 3, 5};//

编译器会将things数组容量设置为3


通常,让编译器去计算元素个数是很糟糕的做法,因为其计数可能和你想的不一样。例如你不小心在列表中遗漏了一个值。然后,这种方法对于将字符数组初始化为一个字符串来说比较安全,很快你就会明白这一点。如果主要关心的问题是程序,而不是自己是否知道数组大小,则可以这样做:


short things[] = {1, 5, 3, 8};
int num_elements = sizeof things / sizeof(short);

C++11数组初始化方法

  • 初始化的时候可以省略🟰
double earning[4] {1.2e4, 1.6e4, 1.1e4, 1.7e4};
  • 可以不在大括号里包含任何东西,将元素都设为0
unsigned int counts[10] = {};
float balances[100] {};
  • 列表初始化禁止缩窄转换
long plifs[] = {25, 92, 3.0};//not allowed
char slifs[4] = {'h', 'i', 1122011, '\0'};//not allowed
char tlifs[4] = {'h', 'i', 112, '\0'};//allowed

扩展

C++标准库(ST L)提供了数组的替代品vector。我们在第16章介绍他们。


参考资料:C++ Prime Pluse 6


相关文章
|
10天前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
41 4
|
1月前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
1月前
|
编译器 Linux C语言
C++基础入门
C++基础入门
|
2月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
38 4
|
2月前
|
安全 编译器 程序员
【C++初阶】C++简单入门
【C++初阶】C++简单入门
|
2月前
|
安全 编译器 C++
C++入门 | 函数重载、引用、内联函数
C++入门 | 函数重载、引用、内联函数
27 5
|
2月前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
51 4
|
2月前
|
编译器 C语言 C++
C++入门 | 命名空间、输入输出、缺省参数
C++入门 | 命名空间、输入输出、缺省参数
40 4
|
2月前
|
编译器 程序员 C语言
C++入门
C++入门
33 5
|
2月前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
65 0
下一篇
无影云桌面