#include <iostream>
#include <string>
using namespace std;
template <class T> void sortArray(T items, int count) {
T t;
for (int a = 1; a < 5; a++) {
for (int b = count - 1; b >= a; b--) {
if (items[b - 1] > items[b]) {
t = items[b - 1];
items[b - 1] = items[b];
items[b] = t;
}
}
}
}
template <class T> void printArray(T items, int count) {
T array[5];
for (int i = 0; i < count; i++) {
cout << array[i] << " ";
}
}
int main() {
int b[5];
double d[5];
char c[5];
int i = 0;
while (i < 5) {
cin >> b[i];
i++;
}
i = 0;
while (i < 5) {
cin >> d[i];
i++;
}
i = 0;
while (i < 5) {
cin >> c[i];
i++;
}
sortArray(b, 5);
sortArray(d, 5);
sortArray(c, 5);
printArray(b, 5);
printArray(d, 5);
printArray(c, 5);
return 0;
}
问问题
50 次
1 回答
1
对于初学者,甚至这个功能
template <class T> void printArray(T items, int count) {
T array[5];
for (int i = 0; i < count; i++) {
cout << array[i] << " ";
}
}
没有意义。array
声明了一个在循环中输出的未初始化的本地数组。
该函数可以通过以下方式定义
template <class T>
std::ostream & printArray( const T *items, size_t n, std::ostream &os = std::cout )
{
for ( size_t i = 0; i < n; i++ )
{
os << items[i] << ' ';
}
return os;
}
sortArray
在这样的模板函数调用中
sortArray(b, 5);
模板类型参数被推导出为 type int *
。所以这个声明
T t;
相当于
int *t;
那没有意义。
同样在您使用幻数的函数内5
。
这是一个演示程序,显示了如何定义函数。
#include <iostream>
#include <utility>
template <class T>
void sortArray( T *items, size_t n )
{
for ( size_t last; !( n < 2 ) ; n = last )
{
for ( size_t i = last = 1; i < n; i++ )
{
if ( items[i] < items[i-1] )
{
std::swap( items[i-1], items[i] );
last = i;
}
}
}
}
template <class T>
std::ostream & printArray( const T *items, size_t n, std::ostream &os = std::cout )
{
for ( size_t i = 0; i < n; i++ )
{
os << items[i] << ' ';
}
return os;
}
int main()
{
int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
const size_t N = sizeof( a ) / sizeof( *a );
printArray( a, N ) << '\n';
sortArray( a, N );
printArray( a, N ) << '\n';
return 0;
}
程序输出为
9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9
于 2020-04-30T14:51:38.397 回答