频道栏目
读书频道 > web开发 > .NET > Visual C++ .NET程序设计教程(第2版)
3.3.1 CLR数组
2012-11-26 14:57:08     我来说两句
收藏   我要投稿
本书以Visual C++ .NET为平台介绍程序设计方法。第一部分为教程,首先介绍Visual C++ .NET开发环境,然后介绍C++/CLI语言基础和C++/CLI面向对象编程基础,在这个基础上系统介绍Visual C++ .NET应用程序设计...  立即去当当网订购

在ISO/ANSI C++中,所谓数组是指相同类型的元素的有序集合,每一个元素在内存中占用相同大小的内存单元,这些内存单元在内存空间中都是连续存放的。它有一维、二维和多维,分别应用于不同的场合。

但C++/CLI的CLR数组与本地C++数组不同,CLR数组使用的内存是在可回收垃圾的堆上分配的。当然,它们的区别还远不止这些。下面分别讨论。

1. 定义和元素引用

在声明CLR数组时,须使用关键字array来指定,其一维CLR数组的一般格式如下:
array<element_type>^ 数组名;

尖括号内的element_type用来指定数组元素的类型。由于CLR数组是在堆上创建的,所以数组变量总是一个跟踪句柄。例如:
array<int>^ data;

则声明了一个CLR一维数组data。在声明CLR数组变量的同时,可以使用gcnew运算符来创建:
array<int>^ data = gcnew array<int>(100);  

注意,数组变量是跟踪句柄,因此在尖括号内指定元素类型之后,不要忘记还必须写上符号^。后面的圆括号内的整数值用来指定数组元素的个数,即上述语句创建的一维数组data包含100个元素单元,各个元素单元均可存储一个int类型的数值(对象)。

与本地C++数组相同,CLR数组中元素的索引值(下标)也是从0开始的,并且也是使用下标运算符“[]”来引用data数组中的元素,例如:
for(int i = 0 ; i<100 ; i++) 
    data[i] = 2*(i+1);

该循环将数组元素的值分别设置为2,4,6,…,直到200。由于CLR数组中的元素都是对象,因此该循环是在数组中存储Int32类型的对象。

2. 使用初值

可以通过为数组中各元素提供初值的方式来创建数组:
array<double>^ samples = { 3.4, 2.3, 6.8, 1.2, 5.5, 4.9. 7.4, 1.6 };

数组的大小取决于大括号内初值的个数,这里是8,相应的初值被顺序赋给各个元素单元。当然,数组元素也可以是其他类型。例如,可以这样来创建一个字符串数组:
array<String^>^ names = { "Jack", "Jane", "Joe", "Jessica", "Jim", "Joanna" };

该数组的元素是用大括号内的字符串进行初始化的,字符串的数量决定着数组元素的数量。String对象是在CLR堆上创建的,因此数组元素属于跟踪句柄类型String^。

如果在声明数组变量时不进行初始化,那么就不能直接用初值来创建,而必须用gcnew显式地创建该数组。例如:
array<String^>^ names;
names = gcnew array<String^>{ "Jack", "Jane", "Joe", "Jessica", "Jim", "Joanna"};

第二条语句是用来创建数组,并用大括号内的字符串进行初始化。如果没有显式的gcnew操作,这条语句将不能编译通过。

3. 使用数组内置功能

CLR数组具有本地C++数组所没有的内置功能,例如Length属性用来记录数组中元素的数量。Length属性是32位的整数值,如果需要,也可以通过LongLength属性得到64位的数组长度。除此之外,还有Clear(将各元素置空或0)、Reverse(次序转置)、Sort(排序)等方法(或称之为函数)。调用或访问这些成员时,均要使用“->”运算符。例如:
for(int i = 0 ; i < data->Length ; i++) 
    data[i] = 2*(i+1);

当然,上述循环遍历的方法还可使用for each语句,例如:
array<int>^ values = { 3, 5, 6, 8, 6}; 
for each(int item in values) 

    item = 2*item + 1; 
    Console::Write("{0,5}",item); 
}
Console::WriteLine();

在该循环内,item依次引用values数组中的每个元素。循环体内的第一条语句使当前元素的值乘以2再加1。第二条语句在5字符宽的字段中以右对齐方式(后面还会讨论)输出当前元素的新值,因此该代码段产生的输出如下:
7   11   13   17   13

 

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.3 C++/CLI数组
下一篇:3.3.2 数组的排序及查找
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站