【C++ Primer Plus学习记录】数组

数组(array)是一种数据格式,能够存储多个同类型的值。例如:数组可以存储60个int类型的值、12个short值或365个float值。每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素。

要创建数组,可使用声明语句。数组声明应指出以下三点:

存储在每个元素中的值的类型;

数组名;

数组中的元素数。

例如:下面的声明创建一个名为months的数组,该数组有12个元素,每个元素都可以存储一个short类型的值。

short months[12]; //create array of 12 short

事实上,可以将数组中的每个元素看作是一个简单变量。

声明数组的通用格式如下:

typeName arrayName[arraySize];

表达式arraySize指定元素数目,它必须是整型常数或const值,也可以是常量表达式(如8*sizeruof(int)),即其中所有的值在编译时都是已知的。具体得说,arraySize不能是变量,变量的值是在程序运行时设置的。稍后将介绍如何使用new运算符来避开这种限制。

单独访问数组元素:使用下标或索引对元素进行从0开始的编号。C++使用带索引的方括号表示法来指定数组元素。例如,months[0]是months数组的第一个元素,months[11]是最后一个元素。注意,最后一个元素的索引比数组长度小1

数组声明能够使用一个声明创建大量的变量,然后便可以用索引来标识和访问各个元素

有效下标值的重要性:编译器不会检查使用的下标是否有效。例如,如果将一个值赋给不存在的元素months[101],编译器并不会指出错误。但是程序运行后,这种赋值可能引发问题,它可能破坏数据或代码,也可能导致程序异常终止。所以必须确保程序只使用有效的下标值。

//4.1 马铃薯分析程序说明了数组的一些属性,包括声明数组、给数组元素赋值以及初始化数组。
#include
using namespace std;

int main()
{
	int yams[3];
	yams[0] = 7;
	yams[1] = 8;
	yams[2] = 6;

	int yamcosts[3] = { 20, 30, 5 };

	cout << "Total yams = " << yams[0] + yams[1] + yams[2] << endl;
	cout << "The package with " << yams[1] << " yams costs " << yamcosts[1] << " cents per yam." << endl;
	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";//sizeof运算符返回类型或数据对象的长度(单位为字节)
	//如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数。
	//但如果将sizeof用于数组元素,则得到的将是元素的长度(单位为字节)
	cout << "Size of one element = " << sizeof yams[0] << " bytes.\n";

	system("pause");

	return 0;
}

只有在定义数组时才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组:

int cards[4] = {3,6,8,10};//okay
int hand[4];              //okay
hand[4] = {5,6,7,9};      //not allowed
hand = cards;             //not allowed

但是,可以使用下标分别给数组中的元素赋值。

初始化数组时,提供的值可以少于数组的元素数目。例如,下面的语句只初始化hotelTips的前两个元素:

float hotelTips[5] = {5.0,2.5};

如果只对数组的一部分进行初始化,则编译器将把其他元素设置为0。因此,将数组中所有的元素都初始化为0非常简单——只要显示地将第一个元素初始化为0,然后让编译器将其他元素都初始化为0即可:

long totals[500] = {0};

如果初始化为{1}而不是{0},则第一个元素被设置为1,其他元素都被设置为0。

如果初始化数组时方括号内([])为空,C++编译器将计算元素个数。例如,对于下面的声明:

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

编译器将使things数组包含4个元素。

C++标准模板库(STL)提供了一种数组替代品——模板类vector,而C++11新增了模板类array。

你可能感兴趣的:(c++,学习,开发语言,算法)