我有一个 std::vector
,其中包含多个 std::tuple
:
std::vector<std::tuple<int,int>> vt;
我可以使用算法std::transform
将向量的内容转换为另一个向量,如下所示:
std::vector<int> vi(vt.size());
std::transform( vt.begin(), vt.end(), vi.begin(), [](auto &v) -> int {
return std::get<0>(v);
} );
当然,我也可以使用一个函数:
当然,我也可以使用一个函数:
int myget(const std::tuple<int,int>& t)
{
return std::get<0>(t);
}
std::vector<int> vi(vt.size());
std::transform( vt.begin(), vt.end(), vi.begin(), myget );
但是,我们是否可以直接在std::transform
的实际参数中使用std::get
呢?
我的意思是像这样:
std::transform( vt.begin(), vt.end(), vi.begin(), std::get<0, ??? > );
std::get
模板函数实例的指针,并将此指针作为可调用对象传递给std::transform
。如果找到了这样的方法,那么肯定会有一种成就感,并且成功地遍历了C++极其复杂的语法,值得自我表扬。但是不要误以为你已经完成了任何实质性的事情,因为最终几乎可以确定编译器将生成实质上相同的代码,而你所做的只是编写了一系列难以理解的标点符号流。 - Sam Varshavchik