我的目标是概括C++__gcd()
中 std 标头中的可用内容。<algorithm>
它应该能够调用std::vector
数组的一系列值。
__gcd()
当直接传递参数时,通用模板可以完美地工作。就像下面这样:
math::GCD(1,2,58,54);
但是,当我尝试传递向量的一系列值时(代码如下),它显示以下错误:
D:\Programming\C++\CPP Programs\My Test\My Test.cpp|33|error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and '__gnu_cxx::__normal_iterator<int*, std::vector<int> >')|
我不知道如何operator<<
在此模板/程序中重载或包含重载函数。(假设该错误是由于operator<<
已错过的重载)
namespace math
{
template <typename M, typename N>
constexpr auto GCD(const M& m, const N& n) {
return __gcd(m, n);
}
template <typename M, typename ...Rest>
constexpr auto GCD(const M& first, const Rest&... rest) {
return __gcd(first, GCD(rest...));
}
}
int main()
{
vector<int> vec={1,2,58,54,102,2,37,13,8};
for(auto i=0; i<vec.size()-3; ++i)
cout<<math::GCD(vec.begin()+i, vec.begin()+i+4)<<endl;
return 0;
}
任何人都可以帮助我超载operator<<
或(如果不是这样)找到错误吗?提前致谢。