设为首页 加入收藏

TOP

4.6.2 CLR数组(3)
2013-10-07 12:27:58 来源: 作者: 【 】 浏览:70
Tags:4.6.2 CLR 数组

4.6.2  CLR数组(3)

该程序的输出如下:

Al < xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Bill

Eve

Jill

Mary

Ted

176

180

115

103

128

168

示例说明

weights数组中的数值是names数组中相同索引位置存储的那个人的体重。程序中调用的Sort()函数将对两个数组同时排序,排序时用第一个数组参数(本示例中是names)来确定两个数组的顺序。从输出中可以看出,排序之后weights数组的对应元素仍然记录着每个人的正确体重。

2. 搜索一维数组

Array类还提供了搜索一维数组元素的函数。BinarySearch()函数使用对分搜索算法,在整个数组中或者从给定范围的元素中,寻找特定元素的索引位置。对分搜索算法要求数组元素是顺序排列的,因此我们需要在搜索之前将数组元素排序。

下面是搜索整个数组的方法:

  1. array<int>values = { 23, 45, 68, 94, 123, 127, 150, 203, 299};  
  2. int toBeFound = 127;  
  3. int position = Array::BinarySearch(values, toBeFound);  
  4. if(position<0)  
  5. Console::WriteLine(L"{0} was not found.", toBeFound);  
  6. else  
  7. Console::WriteLine(L"{0} was found at index
    position {1}.", toBeFound, position); 

要寻找的数值存储在toBeFound变量中。BinarySearch()函数的第一个参数是被搜索数组的句柄,第二个参数是要查找的内容。BinarySearch()函数返回的搜索结果是int类型的数值。如果在第一个参数指定的数组中找到了该函数的第二个参数,则返回目标元素的索引值;否则返回一个负整数。因此,我们必须测试返回的数值,才能确定是否找到了搜索目标。因为values数组中的数值已按升序排列,所以不需要在搜索之前将该数组排序。本代码段产生的输出如下:

  1. 127 was found at index position 5. 

为了搜索数组中给定范围的元素,我们要使用接受4个参数的BinarySearch()函数。第一个参数是被搜索数组的句柄,第二个参数是搜索开始位置对应的元素索引值,第三个参数是搜索的元素数量,第四个参数是要查找的内容。下面是用法示例:

  1. array<int>values = { 23, 45, 68, 94, 123, 127, 150, 203, 299};  
  2. int toBeFound = 127;  
  3. int position = Array::BinarySearch(values, 3, 6, toBeFound); 

该代码段从第四个元素开始搜索values数组,一直搜索到最后。与前面的BinarySearch()版本一样,该函数或者返回找到的索引值,或者在搜索失败时返回一个负整数。

让我们试着编写一个搜索数组的程序。

试一试:搜索数组

该程序是上一个示例的变体,其中增加了搜索操作:

  1. // Ex4_15.cpp : main project file.  
  2. // Searching an array  
  3.  
  4. #include "stdafx.h"  
  5. using namespace System;  
  6.  
  7. int main(array<System::String ^> ^args)  
  8. {  
  9. array<String^>names = {"Jill", "Ted", "Mary", "Eve", "Bill",  
  10. "Al", "Ned", "Zoe", "Dan", "Jean"};  
  11. array<int>weights = { 103, 168, 128, 115, 180,  
  12.  176, 209, 98, 190, 130 };  
  13. array<String^>toBeFound = {"Bill", "Eve", "Al", "Fred"};  
  14.  
  15. Array::Sort( names, weights); // Sort the arrays  
  16.  
  17. int result = 0;             // Stores search result  
  18. for each(String^ name in toBeFound)         // Search to find weights  
  19. {  
  20. result = Array::BinarySearch(names, name);      // Search names array  
  21.  
  22. if(result<0) // Check the result  
  23. Console::WriteLine(L"{0} was not found.", name);  
  24. else  
  25. Console::WriteLine(L"{0} weighs {1} lbs.", name, weights[result]);  
  26. }  
  27. return 0;  

该程序产生的输出如下:

  1. Bill weighs 180 lbs.  
  2. Eve weighs 115 lbs.  
  3. Al weighs 176 lbs.  
  4. Fred was not found. 

示例说明

我们首先创建两个相关的数组,一个存储姓名,另一个存储对应的体重(单位:磅)。还创建了一个toBeFound数组,其中存储着几个人的姓名,我们希望知道他们的体重。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.6.2 CLR数组(4) 下一篇4.6.2 CLR数组(2)

评论

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