如何将std::string_view与反向迭代器一起使用



我正在尝试创建一个非常简单的函数:

bool is_palidrome(const std::string& s)
{
std::string r(s.crbegin(), s.crend());
return s==r;
}

为了避免不必要的分配我想我可以使用字符串视图:

bool is_palidrome(const std::string& s)
{
std::string_view r(s.crbegin(), s.crend());
return s==r;
}

然而,由于编译器找不到合适的构造函数,最后一个函数无法编译(我尝试了g++12.2和clang++15.0(。为什么在std::string_view r(s.cbegin(), s.cend());完美工作的情况下没有构造函数?我检查标准https://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view但我看不出哪个条件不满足。

首先,最好将参数设置为std::string_view(这样就可以在没有任何额外分配的情况下覆盖文本和std::字符串(。

然后你只需要检查一半的范围,并使用算法std::equal(就像在其他答案中一样(。

bool is_palidrome(std::string_view s)
{
return std::equal(begin(s), begin(s) + size(s) / 2, rbegin(s));
}

注意ADL允许跳过某些std::

您不需要std::string_view来执行此操作。

要实现您的方法——将整个字符串与其反向字符串进行比较——您可以使用std::equal

bool is_palindrome(const std::string& s)
{
return std::equal( begin(s), end(s), rbegin(s) );
}

相关内容

  • 没有找到相关文章

最新更新