Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 Tuple 및 Pair를 사용하여 함수에서 여러 값 반환

<시간/>

C 또는 C++에서는 함수에서 둘 이상의 값을 반환할 수 없습니다. 여러 값을 반환하려면 함수와 함께 출력 매개변수를 제공해야 합니다. 여기에서 C++에서 튜플과 쌍 STL을 사용하여 함수에서 여러 값을 반환하는 또 다른 접근 방식을 볼 수 있습니다.

Tuple은 요소 컬렉션을 보유할 수 있는 개체이며 각 요소는 서로 다른 유형일 수 있습니다.

쌍은 서로 다른 유형일 수 있는 두 값의 집합을 만들 수 있습니다. 쌍은 기본적으로 두 개의 값만 허용되는 특수한 유형의 튜플입니다.

튜플과 쌍이 작동하는 방법을 볼 수 있는 한 가지 예를 살펴보겠습니다.

예시

#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과 같은 정수 형식으로 암시적으로 변환할 수 없습니다.