找到字符串末尾的最快方法

dig*_*evo 0 c++ string optimization search c++20

问题很简单:在字符串缓冲区中查找空终止符( '\0' )位置的最快方法是什么?

std::array<char, 100> str { "A sample string literal" };
Run Code Online (Sandbox Code Playgroud)

我想一种选择是使用std::strlen.
我能想到的另一个选择是std::find或者甚至是std::ranges::find

const auto posOfNull { std::find( str.cbegin( ), str.cend( ), '\0' ) };
Run Code Online (Sandbox Code Playgroud)

ExecutionPolicy现在,如果将(eg std::execution::par) 作为第一个参数传递给它,会有什么不同吗?如果会,那么哪种政策适合这种特殊情况?

或者也许是我不知道的第三个选择?

eer*_*ika 5

在字符串缓冲区中查找空终止符('\0')的位置的最快方法是什么?

我假设你的意思是“找到第一个空终止符”。

最快取决于细节。你必须测量才能找到答案。std::strlen是一个相当安全的默认选择。

现在如果 ExecutionPolicy (例如 std::execution::par

缓冲区的长度是 100。多线程的开销可能很容易超过在单线程中查找终止符的时间。

如果会,那么哪种政策适合这种特殊情况?

您测得最快的那个。它们都不会破坏循环的正确性。

或者也许是我不知道的第三个选择?

您可以使用std::char_traits::length。它的优点std::strlen是它适用于所有字符类型(与仅 相比char),并且constexpr允许在常量表达式中使用它。

  • @digito_evo `200 个字符怎么样?我必须进行基准测试。`你已经回答了你自己的问题:) (2认同)