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

C++でタプルとペアを使用して関数から複数の値を返す


CまたはC++では、関数から複数の値を返すことはできません。複数の値を返すには、関数に出力パラメーターを指定する必要があります。ここでは、C++でタプルとペアSTLを使用して関数から複数の値を返す別のアプローチを示します。

タプルは要素のコレクションを保持できるオブジェクトであり、各要素は異なるタイプにすることができます。

ペアは、異なるタイプの2つの値のセットを作成できます。ペアは基本的に特殊なタイプのタプルであり、2つの値のみが許可されます。

タプルとペアが機能する方法を示す1つの例を見てみましょう。

#include<iostream>
#include<tuple>
#include<utility>
using namespace std;
tuple<int, string, char> my_function_tuple(int x, string y) {
   return make_tuple(x, y, 'A'); // make tuples with the values and return
}
std::pair<int, string> my_function_pair(int x, string y) {
   return std::make_pair(x, y); // make pair with the values and return
}
main() {
   int a;
   string b;
   char c;
   tie(a, b, c) = my_function_tuple(48, "Hello"); //unpack tuple
   pair<int, string> my_pair = my_function_pair(89,"World"); //get pair from function
   cout << "Values in tuple: ";
   cout << "(" << a << ", " << b << ", " << c << ")" << endl;
   cout << "Values in Pair: ";
   cout << "(" << my_pair.first << ", " << my_pair.second << ")" << endl;
}

出力

Values in tuple: (48, Hello, A)
Values in Pair: (89, World)

では、上記のプログラムの問題は何ですか? NULLは通常、(void *)0として定義されます。 NULLを整数型に変換することができます。したがって、my_func(NULL)の関数呼び出しはあいまいです。

NULLの代わりにnullptrを使用すると、次のような結果が得られます-

#include<iostream>
using namespace std;
int my_func(int N) { //function with integer type parameter
   cout << "Calling function my_func(int)";
}
int my_func(char* str) { //overloaded function with char* type parameter
   cout << "calling function my_func(char *)";
}
int main() {
   my_func(nullptr); //it will call my_func(char *), but will generate compiler error
}

出力

calling function my_func(char *)

NULLが予想されるすべての場所でnullptrを使用できます。 NULLと同様に、nullptrも任意のポインタ型に変換できます。ただし、これはNULLのような整数型に暗黙的に変換できるわけではありません。


  1. C ++で%演算子を使用せずに3と5の倍数

    %演算子を使用すると、ハードルなしで倍数を見つけることができます。しかし、問題は、%演算子を使用できないことを示しています。 ここでは、+演算子を使用します。前の倍数に3または5を加えることで、倍数を取得できます。例を見てみましょう。 入力 15 出力 1 2 3 - Multiple of 3 4 5 - Multiple of 5 6 - Multiple of 3 7 8 9 - Multiple 3 10 - Multiple of 5 11 12 - Multiple of 3 13 14 15 - Multiple of both 3 and 5 アルゴリズム 番号

  2. C ++を使用してOpenCVで画像をロードして表示するにはどうすればよいですか?

    このトピックでは、C++でOpenCVを使用して画像を読み込んで表示する方法を決定します。 OpenCVで画像を読み込んで表示するには、次の機能が必要です。 マット: マットは機能ではありません。これはデータ構造であり、変数の一種です。 C ++のint、char、string変数タイプと同様に、MatはOpenCVの変数であり、その中に画像をロードするためのマトリックスデータ構造を作成します。このプログラムでは、「MatmyImage;」と書きました。 これは、myImageという名前の行列変数を宣言していることを意味します。 namedWindow(): メモリを割り当て、画像を