[英]Extracting vectors from a tuple
我在元組函數中有int
, vector<int>
和vector<string>
。 如果運行此函數時出錯,它將返回一個元組: {0, 0, {0}, {"0"}}
。 int
沒有錯誤。 我已經簡化了很多代碼,無法弄清楚為什么不能在元組中使用向量。 它在{
下放置了一條紅色的波浪線。 這是一個簡單得多的版本:
#include <iostream>
#include <vector>
using namespace std;
tuple<vector<int>, vector<string>> tuples()
{
return { {0}, {"0"} };
}
int main()
{
tuple<vector<int>, vector<string>> result = tuples();
if (get<0>(result) == {0} && get<1>(result) == {"0"})
{
cout << "It worked!\n";
}
return 0;
}
如果您不能在元組中使用向量,那么另一種方法是什么呢?
您不能在右側(即==
之后)使用initialiser
列表{0}
。
You can't use vectors in tuples
是false
陳述。
將代碼更改為:
tuple<vector<int>, vector<string>> result = tuples();
vector<int> v = {0};
vector<string> v2 = {"0"};
if (get<0>(result) == v && get<1>(result) == v2)
{
cout << "It worked!\n";
}
提供所需的結果。
值得一提的是,為什么編譯器通過查看編譯器的輸出,在您的代碼下加上一條squiggly
紅線。
檢查這一點:)就您根本無法返回初始化程序列表(向量的隱式構造函數)而言,您可以使用向量構造函數(顯式)返回創建的元組。
#include <iostream>
#include <tuple>
#include <vector>
using namespace std;
std::tuple<std::vector<int>, std::vector<string>> tuples()
{
return std::make_tuple(std::vector<int>({0}), std::vector<std::string>({"0"}));
}
int main()
{
tuple<vector<int>, vector<string>> result = tuples();
if (get<0>(result) == std::vector<int>{0} && get<1>(result) == std::vector<std::string>{"0"})
{
cout << "It worked!\n";
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.