kuz*_*ski -5 c++ algorithm palindrome
我最近解决了回文问题,但我不明白这部分代码是如何工作的(用rbegin和rend).有人可以向我解释一下吗?
#include <iostream>
#include <string>
using namespace std;
bool checkPalindrome(string);
int main()
{
string inputString = "palindrom";
cout << checkPalindrome(inputString);
return 0;
}
bool checkPalindrome(std::string inputString)
{
return (inputString == string(inputString.rbegin(), inputString.rend()));
}
Run Code Online (Sandbox Code Playgroud)
小智 6
看一下字符串构造函数:
...
(7) template <class InputIterator>
string (InputIterator first, InputIterator last);
Run Code Online (Sandbox Code Playgroud)
您可以看到可以通过迭代器创建一个字符串.rbegin/rend迭代器是InputIterators,指向它们引用的反向位置:
rend() -->"My string"<-- rbegin()
Run Code Online (Sandbox Code Playgroud)
也就是说,当你将rbegin()和rend()传递给字符串构造函数时,它将从结尾迭代到字符串的开头,创建倒置的:
iteration 0: "g" (currentIterator = rbegin() : push("g")
iteration 1: "n" (currentIterator = rbegin()+1 : push("n")
iteartion 2: "i" (currentIterator = rbegin()+2 : push("i")
...
iteration 8: "M" (currentIterator = rbegin()+8 : push("M")
iteration 9: rend() (currentIterator = rend() : stop iteration)
Run Code Online (Sandbox Code Playgroud)
最后,operator ==()将检查字符串的等价性.