如何在C++中创建元组向量?

How to create a vector of tuples in C++?

本文关键字:元组 向量 创建 C++      更新时间:2023-10-16

有一个生成器,每次迭代都会生成一个包含 16 个整数的元组。我想将这些元组添加到向量中。在创建向量时,我必须写std::vector<std::tuple<int, int, .... 16 times>>.有没有另一种方法可以创建这些元组的向量。

用于测试包含 5 个整数的元组大小写的代码:

#include "cppitertools/itertools.hpp"
#include <iostream> 
#include <tuple>
#include <vector> 
int main()
{
std::vector<int> v1{0, 1};
std::vector<std::tuple<int, int, int, int, int>> states;
for (auto&& i : iter::product<5>(v1)) 
{
states.push_back(i);
}
auto size = states.size();
std::cout << size << std::endl;
}

我正在使用 cppiterator

template<size_t Remaining, typename Type,typename ... Args>
struct make_tuple_n_impl{
using type=typename make_tuple_n_impl<Remaining-1,Type,Type,Args...>::type;
};
template<typename T,typename ... Args>
struct make_tuple_n_impl<0,T,Args...>{
using type=std::tuple<Args...>;
};
template<size_t Count,typename Type>
using tuple_of=typename make_tuple_n_impl<Count,Type>::type;

那么tuple_of<5,int>std::tuple<int,int,int,int,int>.

您可以摆弄iter::product创建的元组类型

#include "cppitertools/itertools.hpp"
#include <iostream> 
#include <tuple>
#include <vector> 
template <typename>
struct remove_tuple_reference;
template <typename... Ts>
struct remove_tuple_reference<std::tuple<Ts...>> {
using type = std::tuple<std::remove_reference_t<Ts>...>;
};
template <typename T>
using remove_tuple_reference_t = typename remove_tuple_reference<T>::type;
int main()
{
std::vector<int> v1{0, 1};
using tup = remove_tuple_reference_t<decltype(iter::product<5>(v1).begin())::value_type>;
std::vector<tup> states;
for (auto&& i : iter::product<5>(v1)) 
{
states.push_back(i);
}
auto size = states.size();
std::cout << size << std::endl;
}