gpt4 book ai didi

C++ : convert vector to tuple

转载 作者:可可西里 更新时间:2023-11-01 16:25:57 28 4
gpt4 key购买 nike

如何将 std::vector 转换为 std::tuple ?我有

class T { };
int cnt = 3;
vector<T*> tv;
for (int i = 0; i < cnt; ++i) {
tv.push_back(new T());
}

我想得到

auto tp = std::tie(*tv[0], *tv[1], *tv[2]);

我怎样才能得到这个tp?如果cnt足够大,我不能手动写这个tp。

  std::vector<
ConvConnection<
decltype(inputLayer),
decltype(*C1[0]),
decltype(*Conn1Opt[0]),
RandomInitialization<arma::mat>,
arma::mat
>* > Conn1(6);

for (size_t i = 0; i < 6; ++i) {
Conn1.push_back(new ConvConnection<
decltype(inputLayer),
decltype(*C1[0]),
decltype(*Conn1Opt[0]),
RandomInitialization<arma::mat>,
arma::mat
>(inputLayer, *C1[i], *Conn1Opt[i], 5, 5));
}

这是代码。这里只有 6 个,但我还需要一些大小超过 100 的 vector 。我需要将这个 vector 转换为元组。

最佳答案

通常,您无法转换 vectortuple .但是,如果您要做的只是创建元组 <f(0), f(1), ..., f(N-1)>对于一些 N这是一个常量表达式,然后可以使用索引序列技巧:

template <typename F, size_t... Is>
auto gen_tuple_impl(F func, std::index_sequence<Is...> ) {
return std::make_tuple(func(Is)...);
}

template <size_t N, typename F>
auto gen_tuple(F func) {
return gen_tuple_impl(func, std::make_index_sequence<N>{} );
}

我们可以这样使用:

// make a tuple of the first 10 squares: 0, 1, 4, ..., 81
auto squares = gen_tuple<10>([](size_t i){ return i*i;});

对于您的特定用例,这将是:

auto connections = gen_tuple<6>([&](size_t i) {
return new ConvConnection<
decltype(inputLayer),
decltype(*C1[0]),
decltype(*Conn1Opt[0]),
RandomInitialization<arma::mat>,
arma::mat
>(inputLayer, *C1[i], *Conn1Opt[i], 5, 5);
});

关于C++ : convert vector to tuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28410697/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com