2012年1月29日日曜日

[C/C++] 新・明解C++入門編 9-1「関数テンプレート」

書籍「新・明解C++入門編 (明解シリーズ)」の中に収められているプログラム等を実際にコンパイル,実行してみた際のメモです.

List 9-1
#include <iostream>

using namespace std;

int maxof(const int x[], int n)
{
  int max = x[0];
  for (int i = 1; i < n; i++)
    if (x[i] > max)
    max = x[i];
  return max;
}

double maxof(const double x[], int n)
{
  double max = x[0];
  for (int i = 1; i < n; i++)
    if (x[i] > max)
      max = x[i];
    return max;
}

int main()
{
  const int isize = 8;
  int ix[isize];

  cout << "Input " << isize << " integer. \n";
  for (int i = 0; i < isize; i++) {
    cout << i + 1 << ":";
    cin >> ix[i];
  }
  cout << "The maximum value is " << maxof(ix, isize) << ". \n\n";

  const int dsize = 5;
  double dx[dsize];

  cout << "Input " << dsize << " real number. \n";
  for (int i = 0; i < dsize; i++) {
    cout << i + 1 << ":";
    cin >> dx[i];
  }
  cout << "The maximum value is " << maxof(dx, dsize) << ". \n";

}

コンパイル,実行結果:
$ g++ List9-1.cpp
$ ./a.out
Input 8 integer. 
1:12
2:35
3:125
4:2
5:532
6:95
7:187
8:34
The maximum value is 532. 

Input 5 real number. 
1:539.2
2:2.456
3:95.5
4:1239.5
5:3.14
The maximum value is 1239.5. 

List 9-2

#include <iostream>

using namespace std;

template <class Type>
Type maxof(const Type x[], int n)
{
  Type max = x[0];
  for (int i = 1; i < n; i++)
    if (x[i] > max)
      max = x[i];
    return max;
}

int main()
{
  const int isize = 8;
  int ix[isize];

  cout << "Input " << isize << " integer. \n";
  for (int i = 0; i < isize; i++) {
    cout << i + 1 << ":";
    cin >> ix[i];
  }
  cout << "The maximum value is " << maxof(ix, isize) << ". \n\n";

  const int dsize = 5;
  double dx[dsize]; 

  cout << "Input " << dsize << " real number. \n";
  for (int i = 0; i < dsize; i++) {
    cout << i + 1 << ":";
    cin >> dx[i];
  }
  cout << "The maximum value is " << maxof(dx, dsize) << ". \n";
}

コンパイル,実行結果:
$ g++ List9-2.cpp
$ ./a.out
Input 8 integer. 
1:12
2:35
3:125
4:2
5:532
6:95
7:187
8:34
The maximum value is 532. 

Input 5 real number. 
1:539.2
2:2.456
3:95.5
4:1239.5
5:3.14
The maximum value is 1239.5. 

List 9-3

#include <iostream>
using namespace std;

template <class Type> Type maxof(Type a, Type b)
{
  return a > b ? a : b;
}

int main()
{
  int a, b;
  double x;

  cout << "Integer a: ";
    cin >> a;
  cout << "Integer b: ";
    cin >> b;
  cout << "Integer c: ";
    cin >> x;

  cout << "The big one with a and b is " << maxof(a, b) << ". \n";
  cout << "The big one with a and x is " << maxof<double>(a, x) << ". \n";   
}

コンパイル,実行結果:
$ g++ List9-3.cpp
$ ./a.out
Integer a: 5
Integer b: 7
Integer c: 4.5
The big one with a and b is 7. 
The big one with a and x is 5. 

List 9-4

#include <cstring>
#include <iostream>

using namespace std;

template <class Type> Type maxof(Type a, Type b)
{
  return a > b ? a : b;
}

template <> const char* maxof<const char*>(const char* a, const char* b)
{
  return strcmp(a, b) > 0 ? a : b;
}

int main()
{
  int a, b;
  char s[64], t[64];

  cout << "Integer a: ";
    cin >> a;
  cout << "Integer b: ";
    cin >> b;
  cout << "String s: ";
    cin >> s;
  cout << "String t: ";
    cin >> t;

  cout << "The big one with a and b is "        << maxof(a, b)                    << ". \n";
  cout << "The big one with s and t is "        << maxof<const char*>(s, t)      << ". \n";
  cout << "The big one with s and \"ABC\" is "  << maxof<const char*>(s, "ABC")  << ". \n";
}

コンパイル,実行結果:
$ g++ List9-4.cpp
$ ./a.out
Integer a: 5
Integer b: 7
String s: AAA
String t: ABD
The big one with a and b is 7. 
The big one with s and t is ABD. 
The big one with s and "ABC" is ABC. 

0 件のコメント :

コメントを投稿