std::string_view compare() 方法
- 自 C++17 起
// (1) Const version only
constexpr int compare( basic_string_view v ) const noexcept;
// (2) Const version only
constexpr int compare( size_type pos1, size_type count1,
basic_string_view v ) const;
// (3) Const version only
constexpr int compare( size_type pos1, size_type count1, basic_string_view v,
size_type pos2, size_type count2 ) const;
// (4) Const version only
constexpr int compare( const CharT* s ) const;
// (5) Const version only
constexpr int compare( const CharT* s ) const;
constexpr int compare( size_type pos1, size_type count1,
const CharT* s ) const;
// (6) Const version only
constexpr int compare( size_type pos1, size_type count1,
const CharT* s, size_type count2 ) const;
比较两个字符序列。
-
(1) 要比较的序列长度
rlen
为std::min(size(), v.size())
。
该函数通过调用Traits::compare(data(), v.data(), rlen)
来比较这两个视图,并根据下表返回一个值重要本节需要改进。您可以通过编辑此文档页面来帮助我们。
-
(2) 等同于
substr(pos1, count1).compare(v)
。 -
(3) 等同于
substr(pos1, count1).compare(v.substr(pos2, count2))
。 -
(4) 等同于
compare(basic_string_view(s))
。 -
(5) 等同于
substr(pos1, count1).compare(basic_string_view(s))
。 -
(6) 等同于
substr(pos1, count1).compare(basic_string_view(s, count2))
。
参数
v
- 要比较的视图s
- 指向要比较的字符串的指针count1
- 此视图要比较的字符数pos1
- 此视图中要比较的第一个字符的位置count2
- 给定视图要比较的字符数pos2
- 给定视图中要比较的第一个字符的位置
返回值
- 如果
*this
在字典序上出现在参数指定的字符序列之前,则返回负值。 - 如果两个字符序列比较相等,则返回零。
- 如果
*this
在字典序上出现在参数指定的字符序列之后,则返回正值。
复杂度
本节需要改进。您可以通过编辑此文档页面来帮助我们。
异常
(无)
可能的实现
template<class CharT, class Traits, class Alloc>
int basic_string_view<CharT, Traits, Alloc>::compare(std::basic_string_view s) const noexcept
{
size_type lhs_sz = size();
size_type rhs_sz = s.size();
int result = traits_type::compare(data(), s.data(), std::min(lhs_sz, rhs_sz));
if (result != 0)
return result;
if (lhs_sz < rhs_sz)
return -1;
if (lhs_sz > rhs_sz)
return 1;
return 0;
}
示例
#include <string_view>
int main() {
using std::operator""sv;
static_assert( "abc"sv.compare("abcd"sv) < 0 );
static_assert( "abcd"sv.compare("abc"sv) > 0 );
static_assert( "abc"sv.compare("abc"sv) == 0 );
static_assert( ""sv.compare(""sv) == 0 );
}