本文介紹在C++語言中,使用一個函數,並返回兩個及以上、同類型或不同類型的返回值的具體方法。 對於C++語言而言,其不能像Python等語言一樣在一個函數中返回多個返回值;但是我們也會經常遇到需要返回兩個甚至更多個值的需求。針對這種情況,我們可以通過pair、tuple(元組)等數據結構,實現C++ ...
本文介紹在C++語言中,使用一個函數,並返回兩個及以上、同類型或不同類型的返回值的具體方法。
對於C++語言而言,其不能像Python等語言一樣在一個函數中返回多個返回值;但是我們也會經常遇到需要返回兩個甚至更多個值的需求。針對這種情況,我們可以通過pair
、tuple
(元組)等數據結構,實現C++函數返回兩個或多個返回值的需求。本文就以pair
為例,介紹二者的具體用法。
首先,我們需要將C++函數的類型定義為pair<>
,其中<>
內為兩個返回值各自的數據類型。例如,如以下代碼所示,我們定義了一個函數raster_to_series
,函數類型為pair<double**, double*>
,表示這一函數的返回值有兩個,且兩個返回值的數據類型分別為double**
與double*
。
pair<double**, double*> raster_to_series(double** pafScanline)
{
// 這裡是函數的代碼部分
// ...
return make_pair(pixel_paf, miss_rate_paf);
}
其中,在函數的返回值部分,我們需要基於make_pair()
函數,將數據類型分別為double**
與double*
的兩個變數放在一起,形成pair
這一結構,再進行返回。
其次,以上pair
、make_pair()
等都是定義在std
這一命名空間內的,因此需要首先聲明一下這一命名空間;再次,在調用這一函數前,我們首先需要定義一個pair <double**, double*>
類型的變數,並將函數的返回值賦給它。
using namespace std;
int main() {
pair <double**, double*> pair_paf = raster_to_series(pafScanline);
double** pixel_paf = pair_paf.first;
double* miss_rate_paf = pair_paf.second;
return 0;
}
隨後,通過.first
與.second
命令,分別獲取pair<double**, double*>
中的兩個變數。
至此,我們即實現了通過一個C++函數返回兩個返回值的方法。
如果需要返回三個或更多的返回值,則可以基於tuple
(元組)這一數據結構,用類似於上述操作的方法來實現。舉一個例子,假如我們想通過一個函數返回三個返回值,就需要將前述代碼中函數的類型定義為tuple<int, double, int>
,將make_pair()
函數更改為make_tuple()
,且在調用函數時首先將返回值賦給一個tuple<int, double, int>
類型的數據,再依次從這一元組類型的數據中提取出三個返回值的具體數值。
至此,大功告成。