C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での可変数の引数


場合によっては、事前定義された数のパラメーターの代わりに、可変数の引数、つまりパラメーターを受け取ることができる関数が必要な状況に遭遇することがあります。 C / C ++プログラミング言語はこの状況の解決策を提供し、要件に基づいて可変数のパラメーターを受け入れることができる関数を定義することができます。次の例は、そのような関数の定義を示しています。

int func(int, ... ) {
   .
   .
   .
}
int main() {
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

関数func()の最後の引数は楕円、つまり3つのドット(...)であり、楕円の直前の引数は常にintであり、渡される可変引数の総数を表すことに注意してください。このような機能を使用するには、変数引数の機能を実装し、指定された手順に従うための関数とマクロを提供するstdarg.hヘッダーファイルを使用する必要があります-

  • 最後のパラメーターを楕円として関数を定義し、楕円の直前の関数は常に int これは引数の数を表します。

  • va_listを作成します 関数定義に型変数。このタイプは、stdarg.hヘッダーファイルで定義されています。

  • intを使用する パラメータとva_start va_listを初期化するマクロ 引数リストへの変数。マクロva_startは、stdarg.hヘッダーファイルで定義されています。

  • va_argを使用します マクロとva_list 引数リストの各項目にアクセスするための変数。

  • マクロを使用するva_end va_listに割り当てられたメモリをクリーンアップします 変数。

次に、上記の手順に従って、可変数のパラメーターを受け取り、それらの平均を返すことができる単純な関数を書き留めます-

サンプルコード

#include <iostream>
#include <cstdarg>
using namespace std;
double average(int num,...) {
   va_list valist;
   double sum = 0.0;
   int i;
   va_start(valist, num); //initialize valist for num number of arguments
   for (i = 0; i < num; i++) { //access all the arguments assigned to valist
      sum += va_arg(valist, int);
   }
   va_end(valist); //clean memory reserved for valist
   return sum/num;
}
int main() {
   cout << "Average of 2, 3, 4, 5 = "<< average(4, 2,3,4,5) << endl;
   cout << "Average of 5, 10, 15 = "<< average(3, 5,10,15)<< endl;
}

出力

Average of 2, 3, 4, 5 = 3.5
Average of 5, 10, 15 = 10

  1. C++のCHAR_BIT

    CHAR_BITは、charのビット数です。これは、C++言語の「limits.h」ヘッダーファイルで宣言されています。 1バイトあたり8ビットです。 これがC++言語のCHAR_BITの例です 例 #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a = CHAR_BIT*sizeof(x);    stack<bool> s;    cout << "T

  2. C ++で変数を初期化するにはどうすればよいですか?

    変数を初期化するには、代入演算子を使用するか、コンストラクターを使用して変数を初期化できます。たとえば、 int i = 0; MyClass instance(1, "Hello"); 次の場合は自動的に初期化されます これは、デフォルトのコンストラクターがすべてのプリミティブ型を初期化するクラス/構造体インスタンスです。 MyClassインスタンスのように; 配列初期化構文を使用します。例: int a [10] ={}(すべてゼロ)またはint a [10] ={1,2}; (最初の2つの項目を除いてすべてゼロになります:a [0]==1およびa[1]==2) こ