我std::inner_product
用来计算 2 中公共前缀的长度strings
:
string a = "abcdef", b = "abc";
size_t r = std::inner_product(a.begin(), a.end(), b.begin(), size_t(0),
[] (size_t v1, size_t v2) { return v1 + v2; },
[] (char c1, char c2) { return size_t(c1 == c2); });
我希望它的大小a
小于b
. 如果大小大于
大小,为什么它会起作用?
这是一个标准实现(无效,但仍然可以):a
b
first2
first1
template<class InputIt1, class InputIt2, class T>
constexpr // since C++20
T inner_product(InputIt1 first1, InputIt1 last1,
InputIt2 first2, T init)
{
while (first1 != last1) {
init = std::move(init) + *first1 * *first2; // std::move since C++20
++first1;
++first2;
}
return init;
}
这是未指明行为的情况吗?
std::inner_product