1.5数组(Arrays)
1.5.1元素个数
数组定义的格式为:
类型名 数组名[常量表达式];
常量表达式表示数组的元素的个数,并不表示最大下标值。
例如:int a[5];
常量表达式的值只要是整数或整数子集就行,例如:
int a['a'];
数组定义是具有编译确定意义的操作,它分配固定大小的空间,就像变量定义一样的明确,因此元素个数必须是由编译时就能定夺的
常量表达式。下面的数组定义就由问题:
int n=100;
int a[n];//错,数组元素的个数必须是常量
虽然上下文,编译似乎已经知道n的值,但编译动作,因变量性质而完全不同,变量性质就是具有空间占用的可访问实体,编译每次碰到一个变量名称就对应一个
访问空间的操作,因此,int a[n]实际上要在运行时,才能读取变量n的值,才能确定其空间的大小,这与数组定义的编译时确定意义的要求相违背,因而编译出错。
而对于下面的定义,却是允许的,因为编译中,常量虽也占空间,甚至也设计内存访问,但因数据确定,而可以被编译用的常数替代。事实上,常量在编译时经常是优化的目标,
能省略内存空间的访问就应该省略,讲求效率的C++编译器会乐此不疲。
const int n=100;
int a[n];
1.5.2初始化(initialization)
数据的读入一般涉及从其他外部设备中输入的过程,但元素不多而又确定数据值的小数组可以直接在程序中初始化。例如:
int iArray[10]={1,1,2,3,5,8,13,21,34,55};
1.5.3默认值(Default Values)
对于没有初始化的数组,分两种情况:一种是全局数组和静态数组,也就是函数外部定义的,或者加上static修饰的数组定义,其元素总是全被清0,;
另一种是局部数组,就是在函数内部定义的数组,它们的值是不确定的。例如:
#include<iostream>
using namespace std;
int array1[5]={1,2,3};//有初始化 输出:1 2 3 0 0
int array2[5];//无初始化 输出:0 0 0 0 0
int main(){
int array3[5]={2};//有初始化 输出:2 0 0 0 0
int array4[5];//无初始化 输出:124502 845597673 0 0 4198406
//.......//
}
1.5.4 二维数组(2-D Arrays)
……
1.6向量(Vectors)
1.6.1基本操作
vector是向量类型,它是一种对象实体,它可以容纳许多其他类型的相同实体,如若干个整数,所以称其为容器,vector是C++ STL(标准模板类库)的重要一员,使用它时,
只要包含资源vector即可。
vector可以有四种定义方式:
(1)vector<int> a(10);//定义了10个整数元素的向量,但并为给初值,因而其值是不确定的。
(2)vector<int> b(10,1);//定义了10个整数元素的向量,且给出其每个元素的初值为1,这种形式是数组望尘莫及的,数组只能通过循环来成批地赋给相同初值
(3)vector<int> c(b);//用一个现成的向量来创建一个向量
(4)vector<int> d(b.begin(),b.begin()+3);//定义了其值依次为b向量中第0到第2个(共3个)元素的向量。
vector<int>是模板形式,尖括号中为元素类型名,它可以是任何合法的数据类型。
1.5.1元素个数
数组定义的格式为:
类型名 数组名[常量表达式];
常量表达式表示数组的元素的个数,并不表示最大下标值。
例如:int a[5];
常量表达式的值只要是整数或整数子集就行,例如:
int a['a'];
数组定义是具有编译确定意义的操作,它分配固定大小的空间,就像变量定义一样的明确,因此元素个数必须是由编译时就能定夺的
常量表达式。下面的数组定义就由问题:
int n=100;
int a[n];//错,数组元素的个数必须是常量
虽然上下文,编译似乎已经知道n的值,但编译动作,因变量性质而完全不同,变量性质就是具有空间占用的可访问实体,编译每次碰到一个变量名称就对应一个
访问空间的操作,因此,int a[n]实际上要在运行时,才能读取变量n的值,才能确定其空间的大小,这与数组定义的编译时确定意义的要求相违背,因而编译出错。
而对于下面的定义,却是允许的,因为编译中,常量虽也占空间,甚至也设计内存访问,但因数据确定,而可以被编译用的常数替代。事实上,常量在编译时经常是优化的目标,
能省略内存空间的访问就应该省略,讲求效率的C++编译器会乐此不疲。
const int n=100;
int a[n];
1.5.2初始化(initialization)
数据的读入一般涉及从其他外部设备中输入的过程,但元素不多而又确定数据值的小数组可以直接在程序中初始化。例如:
int iArray[10]={1,1,2,3,5,8,13,21,34,55};
1.5.3默认值(Default Values)
对于没有初始化的数组,分两种情况:一种是全局数组和静态数组,也就是函数外部定义的,或者加上static修饰的数组定义,其元素总是全被清0,;
另一种是局部数组,就是在函数内部定义的数组,它们的值是不确定的。例如:
#include<iostream>
using namespace std;
int array1[5]={1,2,3};//有初始化 输出:1 2 3 0 0
int array2[5];//无初始化 输出:0 0 0 0 0
int main(){
int array3[5]={2};//有初始化 输出:2 0 0 0 0
int array4[5];//无初始化 输出:124502 845597673 0 0 4198406
//.......//
}
1.5.4 二维数组(2-D Arrays)
……
1.6向量(Vectors)
1.6.1基本操作
vector是向量类型,它是一种对象实体,它可以容纳许多其他类型的相同实体,如若干个整数,所以称其为容器,vector是C++ STL(标准模板类库)的重要一员,使用它时,
只要包含资源vector即可。
vector可以有四种定义方式:
(1)vector<int> a(10);//定义了10个整数元素的向量,但并为给初值,因而其值是不确定的。
(2)vector<int> b(10,1);//定义了10个整数元素的向量,且给出其每个元素的初值为1,这种形式是数组望尘莫及的,数组只能通过循环来成批地赋给相同初值
(3)vector<int> c(b);//用一个现成的向量来创建一个向量
(4)vector<int> d(b.begin(),b.begin()+3);//定义了其值依次为b向量中第0到第2个(共3个)元素的向量。
vector<int>是模板形式,尖括号中为元素类型名,它可以是任何合法的数据类型。