内置数组
int val[10];
const int array_size = 5; int val[array_size];
const char ca1[] = { 'C', '+', '+' };
const char ca2[] = "C++"; //字符串常量包含一个额外的终止空字符
//不能把一个数组赋给另一个数组,要把一个数组拷贝到另一个中去 必须按顺序拷贝每个元素 。
for ( int ix = 0; ix < array_size; ++ix )
ia2[ ix ] = ia1[ ix ];
int ia[ 4 ] [ 3 ];
int ia[ 4 ][ 3 ] = {
{ 0, 1, 2 },
{ 3, 4, 5 },
{ 6, 7, 8 },
{ 9, 10, 11 }
}
用来表示行的花括号 即被内嵌在里边的花括号是可选的.
下面的初始化与前面的是等价的,只是有点不清楚:
int ia[4][3] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
数组元素遍历则可以通过下标操作符来实现
或者我们也可以通过直接操作指针来实现数组元素遍历
C++在编译和运行的时候都没有提供数组下标范围的检查,因此即使运行成功也可能是存在bug
模板template
void ia_print( int *pbegin, int *pend )
{
while ( pbegin != pend )
{
cout << *pbegin << ' ';
++pbegin;
}
}
//泛型程序设计 generic programming
template <class elemType>
void print( elemType *pbegin, elemType *pend )
{
while ( pbegin != pend )
{
cout << *pbegin << ' ';
++pbegin;
}
}
关键字 template 引入模板,参数由一对尖括号 < > 括起来
本例中,有一个参数elemType 关键字 class 表明这个参数代表一个类型
标识符 elemType 代表实际的参数名,它在 Array 类定义中都是作为实际类型的占位符
函数可以使用模板,类的定义也可以使用模板
vector(属于模板:类模板)
//vector向量是一个类模板
#include < vector >
vector<int> vec1( 10 ); //size为10的向量,全部初始化为0
vector<string> vec2( 10,1024 ); //size为10的向量,全部初始化为1024
int ia[4] = { 0, 1, 1, 2 };
vector<int> vec3( ia, ia+4 ); //被初始化为 ia 的 4 个值
vector<int> vec4( vec2 );// vec4 是 vec2 的拷贝
标准 vector 类模支持使用下标操作符遍历
另外一种遍历方法是使用迭代器对 iterator pair 来标记向量的起始处和结束处
vector 类模板提供了一对操作 begin()和 end() 它们分别返回指向 `向量开始处` 和 `结束处后 1 个` 的迭代器
vector< int>::iterator iter = vec.begin();
++iter //指向下一个元素
*iter //访问元素
算法库支持一系列独立的泛型算法集,可以用到向量上
泛型算法接受一对迭代器 它们标记了要遍历元素的范围
sort( ivec.begin(), ivec.end() );
使用前需要包含与它们相关的头文件
#include <algorithm>
网友评论