从元组中提取向量

Extracting vectors from a tuple

本文关键字:向量 提取 元组      更新时间:2023-10-16

我在元组功能中有int S,A vector<int>vector<string>。如果运行此功能时存在错误,它将返回:{0, 0, {0}, {"0"}}的元组。int S没有错误。我经常简化了此代码,并且无法弄清楚为什么我不能在元组中使用向量。它在{下放置了一条红色的线条。这是一个更简单的版本:

#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 tuplesfalse语句。

将代码更改为:

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红线放在您的代码下。

检查此一个:),据您根本无法返回初始器列表(Vector的隐式构造函数),您可以返回使用Vector构造器(explicit)返回创建的元组。

#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;
}