gpt4 book ai didi

c++ - 为什么 std::find 是这样实现的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:58 24 4
gpt4 key购买 nike

我碰巧遇到了 std::find 的源代码,发现它让我感到困惑。基本上它将项目数除以 4 并在每一轮中进行比较 4:

template<typename _RandomAccessIterator, typename _Tp>
_RandomAccessIterator
__find(_RandomAccessIterator __first, _RandomAccessIterator __last,
const _Tp& __val, random_access_iterator_tag)
{
typename iterator_traits<_RandomAccessIterator>::difference_type
__trip_count = (__last - __first) >> 2;

for (; __trip_count > 0; --__trip_count)
{
if (*__first == __val)
return __first;
++__first;

if (*__first == __val)
return __first;
++__first;

if (*__first == __val)
return __first;
++__first;

if (*__first == __val)
return __first;
++__first;
}

switch (__last - __first)
{
case 3:
if (*__first == __val)
return __first;
++__first;
case 2:
if (*__first == __val)
return __first;
++__first;
case 1:
if (*__first == __val)
return __first;
++__first;
case 0:
default:
return __last;
}
}

我不知道为什么要这样做。看起来像一些优化。但我认为这不会那么容易地利用多核。无论如何,这是在一个线程中。

有什么想法吗?

最佳答案

看起来像loop unwinding ,也称为循环展开。

关于c++ - 为什么 std::find 是这样实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14936413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com