据称内联std :: inner_product()没有内联gcc编译器< gcc 4.1 编译器,按照以下bug。
因此我想实现我自己的inner_product版本。是 现有的实施可用吗?
谢谢
答案 0 :(得分:2)
您只需要查看C ++头文件,找到定义,然后使用“inline”关键字(可能在您的命名空间中)重新定义它。例如,查看我的标题:
template <class T1, class T2, class T> inline T inner_product(T1 first1, T1 last1, T2 first2, T init)
{
for (; first1 != last1; ++first1, ++first2) init = init + *first1 * *first2; return init;
}
答案 1 :(得分:1)
明显的实现看起来像这样:
// warning: untested code:
template <class I1, class I2, class T>
T inline inner_product(I1 s1, I1 e1, I2 s2, T i) {
while (s1!=e1) {
i = i + ((*(s1)) * (*(s2)));
++(s1);
++(s2);
}
return i;
}
template <class I1, class I2, class T, class B1, class B2>
T inline inner_product(I1 s1, I1 e1, I2 s2, T i, B1 b1, B2 b2) {
while (s1!=e1) {
i=b1(i, b2(*(s1), *(s2)));
++(s1);
++(s2);
}
return i;
}
使用这样的短标识符可能有问题,但对于这样的代码,它存在于标题中,因此编译了数十亿次,短标识符可以节省解析时间......