设为首页 加入收藏

TOP

4.6.2 CLR数组(6)
2013-10-07 12:28:22 来源: 作者: 【 】 浏览:59
Tags:4.6.2 CLR 数组

4.6.2  CLR数组(6)

试一试:使用数组的数组

创建一个CLR控制台程序项目,并将其修改成如下形式:

  1. // Ex4_17.cpp : main project file.  
  2. // Using an array of arrays  
  3.  
  4. #include "stdafx.h"  
  5.  
  6. using namespace System;  
  7.  
  8. int main(array<System::String ^> ^args)  
  9. {  
  10. array< array< String>>grades = gcnew array< array< String>> 
  11. {  
  12. gcnew array<String^>{"Louise", "Jack"},             // Grade A  
  13. gcnew array<String^>{"Bill", "Mary", "Ben", "Joan"},  
  14.                                                     // Grade B  
  15. gcnew array<String^>{"Jill", "Will", "Phil"},       // Grade C  
  16. gcnew array<String^>{"Ned", "Fred", "Ted", "Jed", "Ed"},   
  17.                                                                 // Grade D  
  18. gcnew array<String^>{"Dan", "Ann"} // Grade E  
  19. };  
  20. wchar_t gradeLetter = 'A';  
  21.  
  22. for each(array< String>^ grade in grades)  
  23. {  
  24. Console::WriteLine(L"Students with Grade {0}:", gradeLetter++);  
  25.  
  26. for each( String^ student in grade)  
  27. Console::Write(L"{0,12}",student); // Output the current name  
  28. Console::WriteLine();           // Write a newline  
  29. }  
  30. return 0;  

该示例产生下面的输出:

  1. Students with Grade A:  
  2. Louise          Jack  
  3. Students with Grade B:  
  4. Bill        Mary    Ben     Joan  
  5. Students with Grade C:  
  6. Jill    Will    Phil  
  7. Students with Grade D:  
  8. Ned         Fred    Ted     Jed     Ed  
  9. Students with Grade E:  
  10. Dan         Ann 

示例说明

数组定义完全与前面看到的一样。接下来,我们定义wchar_t类型的变量gradeLetter,其初值为'A'。该变量将用来在输出中给出等级。

学生和等级在嵌套循环中输出。外部的for each循环逐一处理grades数组的元素:

  1. for each(array< String>^ grade in grades)  
  2. {  
  3. // Process students in the current grade...  

循环变量grade是array< String^ >^类型,因为这是grades数组的元素类型。变量grade依次引用元素类型为String^句柄的各个数组,因此第一次执行循环时引用A等学生的姓名数组,第二次引用B等学生的姓名数组,直到最后一次执行循环时引用E等学生的姓名数组。

在外部循环的每次重复中,都执行下面的代码:

  1. Console::WriteLine(L"Students with Grade {0}:", gradeLetter++);  
  2.  
  3. for each( String^ student in grade)  
  4. Console::Write(L"{0,12}",student);  // Output the current name  
  5.  
  6. Console::WriteLine();           // Write a newline 

第一条语句输出的信息中包括gradeLetter的当前值-- 最初是'A',该语句还使gradeLetter递增,因此在外部循环以后的重复中该变量的值将依次变为'B'、'C'、'D'和'E'。

接下来,我们用for each循环依次输出当前数组中的每个姓名。输出语句使用Console::Write()函数,因此所有姓名都显示在同一行上。输出的姓名靠右对齐,字段宽度为12字符,因此各输出行的姓名是上下对齐的。在循环之后,WriteLine()只是将换行符写到输出流中,从而使下次输出从新行上开始。

也可以使用for循环作为内部循环:

  1. for (int i = 0 ; i < grade->Length ; i++)  
  2. Console::Write(L"{0,12}",grade[i]);     // Output the current name 

该循环受制于grade变量引用的当前数组的Length属性。

我们同样可以使用for循环作为外部循环,这种情况下对内部循环需要作进一步的修改,这样的嵌套循环如下所示:

  1. for (int j = 0 ; j < grades->Length ; j++)  
  2. {  
  3. Console::WriteLine(L"Students with Grade {0}:", gradeLetter+j);  
  4. for (int i = 0 ; i < grades[j]->Length ; i++)  
  5. Console::Write(L"{0,12}",grades[j][i]); // Output the current name  
  6. Console::WriteLine();  

现在,grades[j]引用第j个姓名数组,因此表达式grades[j][i]将引用第j个姓名数组的第i个姓名。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.6 C++/CLI编程 下一篇4.6.2 CLR数组(5)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: