[C++]第三章 2014.11.30

本文详细介绍了C++中的数组,包括数组的定义、初始化和默认值,强调了数组元素个数必须是编译时常量。接着讲解了向量,包括其基本操作、初始化和与其他容器交互的方式,展示了向量在动态分配和初始化方面的优势。此外,还提到了二维数组的概念。最后,文章深入讨论了指针,包括指针的类型、运算、限定以及引用的特性,指出引用作为别名的安全性和便捷性。
摘要由CSDN通过智能技术生成
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>是模板形式,尖括号中为元素类型名,它可以是任何合法的数据类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值