使用反向迭代器实现回文
代码错误为“运算符/”,未为迭代器定义
bool isPalindrome( std::string & s)
{
bool check = ( s == std::string{ s.rbegin(), s.rend() } );
return check; // works fine
}
上面的个比较。 (n=s.length
)
s == string{ s.rbegin(), s.rbegin() + (s.rend()/2) }
/* error: operator/ not defined */
我期望通过floor(n/2)
比较可以进行一两行回文检查。
有没有精美的代码。我是否缺少有关反向迭代器的东西?
和std::string{"cac"}
的输入应返回true,并且需要进行1次比较
如何使用反向迭代器在O(1)时间内获得中点
答案 0 :(得分:3)
将迭代器除以数字实际上没有任何意义。您可以做的就是获得一个迭代器,该迭代器可以像容器长度的一半那样前进:
string{s.rbegin(), std::next(s.rbegin(), s.size() / 2)}
std::next将迭代器增加提供的次数后获得迭代器。
O(1)
仅对于std::vector
,std::array
和std::string
等连续容器有效。
答案 1 :(得分:0)
您混淆了使用该元素的索引引用该元素的内容。只要考虑一下s.rend()/2
的含义。您真正想要的是两个索引之间的差异除以2。
给出两个迭代器,您可以通过std::distance
来获得它们的距离。