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()函数使用对分搜索算法,在整个数组中或者从给定范围的元素中,寻找特定元素的索引位置。对分搜索算法要求数组元素是顺序排列的,因此我们需要在搜索之前将数组元素排序。
下面是搜索整个数组的方法:
- array<int>^ values = { 23, 45, 68, 94, 123, 127, 150, 203, 299};
- int toBeFound = 127;
- int position = Array::BinarySearch(values, toBeFound);
- if(position<0)
- Console::WriteLine(L"{0} was not found.", toBeFound);
- else
- Console::WriteLine(L"{0} was found at index
position {1}.", toBeFound, position);
要寻找的数值存储在toBeFound变量中。BinarySearch()函数的第一个参数是被搜索数组的句柄,第二个参数是要查找的内容。BinarySearch()函数返回的搜索结果是int类型的数值。如果在第一个参数指定的数组中找到了该函数的第二个参数,则返回目标元素的索引值;否则返回一个负整数。因此,我们必须测试返回的数值,才能确定是否找到了搜索目标。因为values数组中的数值已按升序排列,所以不需要在搜索之前将该数组排序。本代码段产生的输出如下:
- 127 was found at index position 5.
为了搜索数组中给定范围的元素,我们要使用接受4个参数的BinarySearch()函数。第一个参数是被搜索数组的句柄,第二个参数是搜索开始位置对应的元素索引值,第三个参数是搜索的元素数量,第四个参数是要查找的内容。下面是用法示例:
- array<int>^ values = { 23, 45, 68, 94, 123, 127, 150, 203, 299};
- int toBeFound = 127;
- int position = Array::BinarySearch(values, 3, 6, toBeFound);
该代码段从第四个元素开始搜索values数组,一直搜索到最后。与前面的BinarySearch()版本一样,该函数或者返回找到的索引值,或者在搜索失败时返回一个负整数。
让我们试着编写一个搜索数组的程序。
试一试:搜索数组
该程序是上一个示例的变体,其中增加了搜索操作:
- // Ex4_15.cpp : main project file.
- // Searching an array
-
- #include "stdafx.h"
- using namespace System;
-
- int main(array<System::String ^> ^args)
- {
- array<String^>^ names = {"Jill", "Ted", "Mary", "Eve", "Bill",
- "Al", "Ned", "Zoe", "Dan", "Jean"};
- array<int>^ weights = { 103, 168, 128, 115, 180,
- 176, 209, 98, 190, 130 };
- array<String^>^ toBeFound = {"Bill", "Eve", "Al", "Fred"};
-
- Array::Sort( names, weights); // Sort the arrays
-
- int result = 0; // Stores search result
- for each(String^ name in toBeFound) // Search to find weights
- {
- result = Array::BinarySearch(names, name); // Search names array
-
- if(result<0) // Check the result
- Console::WriteLine(L"{0} was not found.", name);
- else
- Console::WriteLine(L"{0} weighs {1} lbs.", name, weights[result]);
- }
- return 0;
- }
该程序产生的输出如下:
- Bill weighs 180 lbs.
- Eve weighs 115 lbs.
- Al weighs 176 lbs.
- Fred was not found.
示例说明
我们首先创建两个相关的数组,一个存储姓名,另一个存储对应的体重(单位:磅)。还创建了一个toBeFound数组,其中存储着几个人的姓名,我们希望知道他们的体重。