我在元组函数中有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;
}
如果你不能在元组中使用向量,那么另一种方法呢?
答案 0 :(得分:4)
您不能在右侧使用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
红线。
答案 1 :(得分:1)
检查这一个:)只要你不能返回初始化列表(向量的隐式构造函数),就可以返回带有向量构造函数(显式)的创建元组。
#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;
}