[英]Use of `std::make_pair` in std::pair : C++ STL
我注意到很多次,只要需要為(新) std::pair
賦值,就會使用std::make_pair
。 但是我沒有找到make_pair
函數的任何用法,因為我們可以直接將值輸入到一對,並根據需要修改它們。 例如:
std::pair<int,int> newp;
std::cin>>newp.first>>newp.second;
newp.first = -1;
那究竟是什么功能的使用?
std::make_pair
用於創建具有指定值的std::pair
對象。
創建一個std :: pair對象,從參數類型中推導出目標類型。
作為支持自動模板參數類型推導的模板函數,它允許您省略指定目標模板參數類型。 例如,
auto p1 = std::make_pair(1, 2); // p1 is std::pair<int, int> with value {1, 2}
我們可以直接輸入一對值,並根據需要修改它們。 例如:
std::pair<int,int> newp; std::cin>>newp.first>>newp.second; newp.first = -1;
我能想到的一些問題:
您並不總是准備好流對象。 std::cin
是一個非常特殊的情況, std::make_pair
是一個非常通用的函數。
誰說這兩種類型都支持operator>>
?
Const正確性。 你可能想要一個const
對。
讓我們把這三件事放在一起創建一個非編譯示例:
#include <utility>
#include <iostream>
struct Foo
{
int i;
};
struct Bar
{
double d;
};
void printPair(std::pair<Foo, Bar> const& pair)
{
std::cout << pair.first.i << " " << pair.second.d << "\n";
}
void createAndPrintPairTwice(Foo const& foo, Bar const& bar)
{
// error 1: no std::cin, need to use foo and bar
// error 2: no operator>> for Foo or Bar
// error 3: cannot change pair values after initialisation
std::pair<Foo, Bar> const newp;
std::cin >> newp.first >> newp.second;
printPair(newp);
printPair(newp);
}
int main()
{
Foo foo;
foo.i = 1;
Bar bar;
bar.d = 1.5;
createAndPrintPairTwice(foo, bar);
}
std::make_pair
解決了所有三個問題,並使代碼更好閱讀。 請注意,您不必重復該對的模板參數:
void createAndPrintPairTwice(Foo const& foo, Bar const& bar)
{
std::pair<Foo, Bar> const pair = std::make_pair(foo, bar);
printPair(pair);
printPair(pair);
}
真正的是,C ++ 11使得std::make_pair
比以前更有用,因為你現在也可以寫:
void createAndPrintPairTwice(Foo const& foo, Bar const& bar)
{
auto const pair = std::pair<Foo, Bar> { foo, bar };
printPair(pair);
printPair(pair);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.