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のような整数型に暗黙的に変換できるわけではありません。
-
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 アルゴリズム 番号
-
C ++を使用してOpenCVで画像をロードして表示するにはどうすればよいですか?
このトピックでは、C++でOpenCVを使用して画像を読み込んで表示する方法を決定します。 OpenCVで画像を読み込んで表示するには、次の機能が必要です。 マット: マットは機能ではありません。これはデータ構造であり、変数の一種です。 C ++のint、char、string変数タイプと同様に、MatはOpenCVの変数であり、その中に画像をロードするためのマトリックスデータ構造を作成します。このプログラムでは、「MatmyImage;」と書きました。 これは、myImageという名前の行列変数を宣言していることを意味します。 namedWindow(): メモリを割り当て、画像を