我对大部分程序都很好,直到选择项的签名,其中有一个指向一个名为compare的函数的指针但我在这段代码中没有看到该函数.我想我想问的是如何比较工作?
// Fig. 8.20: fig08_20.cpp
// Multipurpose sorting program using function pointers.
#include <iostream>
#include <iomanip>
using namespace std;
// prototypes
void selectionSort( int [], const int, bool (*)( int, int ) );
void swap( int * const, int * const );
bool ascending( int, int ); // implements ascending order
bool descending( int, int ); // implements descending order
int main()
{
const int arraySize = 10;
int order; // 1 = ascending, 2 = descending
int counter; // array index
int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
cout << "Enter 1 to sort in ascending order,\n"
<< "Enter 2 to sort in descending order: ";
cin >> order;
cout << "\nData items in original order\n";
// output original array
for ( counter = 0; counter < arraySize; counter++ )
cout << setw( 4 ) << a[ counter ];
// sort array in ascending order; pass function ascending
// as an argument to specify ascending sorting order
if ( order == 1 )
{
selectionSort( a, arraySize, ascending );
cout << "\nData items in ascending order\n";
} // end if
// sort array in descending order; pass function descending
// as an argument to specify descending sorting order
else
{
selectionSort( a, arraySize, descending );
cout << "\nData items in descending order\n";
} // end else part of if...else
// output sorted array
for ( counter = 0; counter < arraySize; counter++ )
cout << setw( 4 ) << a[ counter ];
cout << endl;
} // end main
// multipurpose selection sort; the parameter compare is a pointer to
// the comparison function that determines the sorting order
void selectionSort( int work[], const int size,
bool (*compare)( int, int ) )
{
int smallestOrLargest; // index of smallest (or largest) element
// loop over size - 1 elements
for ( int i = 0; i < size - 1; i++ )
{
smallestOrLargest = i; // first index of remaining vector
// loop to find index of smallest (or largest) element
for ( int index = i + 1; index < size; index++ )
if ( !(*compare)( work[ smallestOrLargest ], work[ index ] ) )
smallestOrLargest = index;
swap( &work[ smallestOrLargest ], &work[ i ] );
} // end if
} // end function selectionSort
// swap values at memory locations to which
// element1Ptr and element2Ptr point
void swap( int * const element1Ptr, int * const element2Ptr )
{
int hold = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = hold;
} // end function swap
// determine whether element a is less than
// element b for an ascending order sort
bool ascending( int a, int b )
{
return a < b; // returns true if a is less than b
} // end function ascending
// determine whether element a is greater than
// element b for a descending order sort
bool descending( int a, int b )
{
return a > b; // returns true if a is greater than b
} // end f return a > b; // returns true if a is greater than b
Run Code Online (Sandbox Code Playgroud)
其中有一个指向名为 Compare 的函数的指针
Invoid selectionSort( int work[], const int size,bool (*compare)( int, int ) ) compare只是(最后一个)参数的本地名称。就像work您作为第一个参数传入的数组(实际上是指针...)的本地名称一样,compare也是您传递给它的函数指针的本地名称。
在此代码中,您将函数指针传递给ascending和descending函数。
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |