数组(C++)
数组类似对象的集合。 数组的最简单的情况是向量,可以按以下顺序声明:
decl-specifier identifier [ constant-expression ]
decl-specifier identifier []
decl-specifier identifer [][ constant-expression] . . .
decl-specifier identifier [ constant-expression ]
[ constant-expression ] . . .
1. 声明说明符:
一种选项存储类说明符。
选项 const 和 volatile 说明符。
数组元素的类型名称。
2. 声明:
标识符。
用方括号括起来的整型常数表达式, **[]。**使用附加的括号,如果多个维度声明,常数表达式中可以忽略第一组括号。
将常数表达式的可选附加括号。
3. 一个选项初始值设定项。 初始值设定项参见。
常数表达式提供元素数。数组的。 在数组的第一个元素是 0th 元素,并且,最后一个元素是 (n-1) 元素,其中 n 是元素数该数组可能包含。 常数表达式 大于 0 必须是整型,并且必须大。 大小为零的数组是非法的,仅当数组位于 struct 或 联合 中的最后一个字段,因此,在 Microsoft 扩展 (/Ze) 启用。
下面的示例演示如何定义数组在运行时:
// arrays.cpp
// compile with: /EHsc
#include <iostream>
int main() {
using namespace std;
int size = 3, i = 0;
int* myarr = new int[size];
for (i = 0 ; i < size ; i++)
myarr[i] = 10;
for (i = 0 ; i < size ; i++)
printf_s("myarr[%d] = %d\n", i, myarr[i]);
delete [] myarr;
}
由于数组是派生类型,可以从派生的任何其他构造或除函数的基础类型,引用和 void。
从其他数组构造数组是多维数组。 这些多维数组通过按顺序将多个括起来的常数表达式指定。 例如,请考虑此声明:
int i2[5][7];
它在五行和七个列一个二维矩阵指定数组类型 int,概念上排列,如下图所示:
多维数组概念格式
在有一个初始值设定项列表 multidimensioned 数组的声明 (如 初始值设定项所述),指定的常数表达式第一个维的区域可以省略。 例如:
// arrays2.cpp
// compile with: /c
const int cMarkets = 4;
// Declare a float that represents the transportation costs.
double TransportCosts[][cMarkets] = {
{ 32.19, 47.29, 31.99, 19.11 },
{ 11.29, 22.49, 33.47, 17.29 },
{ 41.97, 22.09, 9.76, 22.55 }
};
上面的声明定义为三行由四列的数组。 行表示工厂,并且列表示捕鲸船的市场。 值是从工厂的运输成本。市场。 数组的第一个维忽略,但是,编译器通过检查该初始值设定项填充。
此节中的主题:
示例
省略多维数组的第一个维的区域规范技术也可以在函数声明如下:
// multidimensional_arrays.cpp
// compile with: /EHsc
// arguments: 3
#include <limits> // Includes DBL_MAX
#include <iostream>
const int cMkts = 4, cFacts = 2;
// Declare a float that represents the transportation costs
double TransportCosts[][cMkts] = {
{ 32.19, 47.29, 31.99, 19.11 },
{ 11.29, 22.49, 33.47, 17.29 },
{ 41.97, 22.09, 9.76, 22.55 }
};
// Calculate size of unspecified dimension
const int cFactories = sizeof TransportCosts /
sizeof( double[cMkts] );
double FindMinToMkt( int Mkt, double myTransportCosts[][cMkts], int mycFacts);
using namespace std;
int main( int argc, char *argv[] ) {
double MinCost;
if (argv[1] == 0) {
cout << "You must specify the number of markets." << endl;
exit(0);
}
MinCost = FindMinToMkt( *argv[1] - '0', TransportCosts, cFacts);
cout << "The minimum cost to Market " << argv[1] << " is: "
<< MinCost << "\n";
}
double FindMinToMkt(int Mkt, double myTransportCosts[][cMkts], int mycFacts) {
double MinCost = DBL_MAX;
for( int i = 0; i < cFacts; ++i )
MinCost = (MinCost < TransportCosts[i][Mkt]) ?
MinCost : TransportCosts[i][Mkt];
return MinCost;
}
注释
函数 FindMinToMkt 编写此类添加新的工厂不需要任何代码更改,重新编译。