找到字符串结尾的最快方法
fastest way of finding the end of a string
问题很简单:在字符串缓冲区中找到空终止符 ('\0') 位置的最快方法是什么?
std::array<char, 100> str { "A sample string literal" };
我想一个选择是使用 std::strlen
.
我能想到的另一个选择是 std::find
甚至 std::ranges::find
:
const auto posOfNull { std::find( str.cbegin( ), str.cend( ), '[=11=]' ) };
现在,如果将 ExecutionPolicy
(例如 std::execution::par
)作为第一个参数传递给它,会有什么不同吗?如果可以,那么哪种政策适合这种特殊情况?
或者我不知道的第三个选项?
What is the quickest way of finding the position of the null-terminator ('[=15=]') in a string buffer?
我假设您的意思是“找到 第一个 空终止符”。
最快取决于细节。你必须测量才能找出答案。 std::strlen
是一个相当安全的默认选择。
Now would it make a difference if an ExecutionPolicy (e.g. std::execution::par
您的缓冲区长度为 100。多线程的开销很容易超过在单线程中查找终止符的时间。
If it would, then which policy is the appropriate one for this particular case?
您测得最快的那个。 None 其中会破坏循环的正确性。
Or maybe a 3rd option that I don't know about?
您可以使用 std::char_traits::length
。它优于 std::strlen
的优点是它适用于所有字符类型(与仅 char
相比),并且 constexpr
允许在常量表达式中使用它。
问题很简单:在字符串缓冲区中找到空终止符 ('\0') 位置的最快方法是什么?
std::array<char, 100> str { "A sample string literal" };
我想一个选择是使用 std::strlen
.
我能想到的另一个选择是 std::find
甚至 std::ranges::find
:
const auto posOfNull { std::find( str.cbegin( ), str.cend( ), '[=11=]' ) };
现在,如果将 ExecutionPolicy
(例如 std::execution::par
)作为第一个参数传递给它,会有什么不同吗?如果可以,那么哪种政策适合这种特殊情况?
或者我不知道的第三个选项?
What is the quickest way of finding the position of the null-terminator ('[=15=]') in a string buffer?
我假设您的意思是“找到 第一个 空终止符”。
最快取决于细节。你必须测量才能找出答案。 std::strlen
是一个相当安全的默认选择。
Now would it make a difference if an ExecutionPolicy (e.g. std::execution::par
您的缓冲区长度为 100。多线程的开销很容易超过在单线程中查找终止符的时间。
If it would, then which policy is the appropriate one for this particular case?
您测得最快的那个。 None 其中会破坏循环的正确性。
Or maybe a 3rd option that I don't know about?
您可以使用 std::char_traits::length
。它优于 std::strlen
的优点是它适用于所有字符类型(与仅 char
相比),并且 constexpr
允许在常量表达式中使用它。