当我使用指针时,输入:5 输出:0x29987 但当我不使用指针时,我在第18行出现错误。

问题描述 投票:-1回答:1
#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;
} 
c++ sorting templates bubble-sort function-definition
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);

模板类型参数被推导为类型的 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 
© www.soinside.com 2019 - 2024. All rights reserved.