C++ 如果可能的话,我如何使用可变模板来生成一个函数,该函数可以并排打印任意类型的多个std::Vector?
我正在尝试编写一个函数printV(),该函数获取任意内置类型的向量(可能少于六个),作为常量引用传递并并排打印,以便compareV(v1、v2、v3)生成输出:C++ 如果可能的话,我如何使用可变模板来生成一个函数,该函数可以并排打印任意类型的多个std::Vector?,c++,variadic-templates,C++,Variadic Templates,我正在尝试编写一个函数printV(),该函数获取任意内置类型的向量(可能少于六个),作为常量引用传递并并排打印,以便compareV(v1、v2、v3)生成输出: v1[1], v2[1], v3[1] v1[2], v2[2], v3[3] v1[3], v2[3], v3[3] 下面是我用来打印单个向量的函数: template <typename T> void printV(const std::vector<T> &vec) { for
v1[1], v2[1], v3[1]
v1[2], v2[2], v3[3]
v1[3], v2[3], v3[3]
下面是我用来打印单个向量的函数:
template <typename T>
void printV(const std::vector<T> &vec)
{
for (int i = 0; i < vec.size(); i++)
{
std::cout << i << ": " << vec[i] << std::endl;
}
}
模板
void printV(常量标准::向量和向量)
{
对于(int i=0;i
template <typename firstT, typename... T>
void printV(const std::vector<firstT>& first, const std::vector<T>& ... vec)
{
for(int i = 0; i < first.size(); i++)
{
std::cout << i << ": " << first.at(i);
( (std::cout << ' ' << vec.at(i)), ... );
std::cout << std::endl;
}
}
模板
void printV(常数std::vector&first,常数std::vector&…vec)
{
对于(int i=0;i std::cout可能会添加一条注释,如果任何不是first
的向量比first
的向量短,则会引发该注释。请偏执,在使用运算符逗号之前,将cout流包装在一个空型中。另外,带有初始值设定项列表的variardic std min可能会减少“不等数组”的大小写。最后,您应该为分配器设置模板。
// From Section 3.4.4 of "The C++ Programming Language"
template<typename T, typename ... Tail>
void f(T head, Tail... tail)
{
g(head); // do something to head
f(tail...); // try again with tail
}
void f() { } // do nothing
template <typename firstT, typename... T>
void printV(const std::vector<firstT>& first, const std::vector<T>& ... vec)
{
for(int i = 0; i < first.size(); i++)
{
std::cout << i << ": " << first.at(i);
( (std::cout << ' ' << vec.at(i)), ... );
std::cout << std::endl;
}
}