如何理解这段C++回文代码?
How to understand this C++ palindrome code?
我最近来到回文问题的解决方案,但我不明白这部分代码是如何工作的(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()));
}
基本上,您要反转 inputString
,然后检查两个字符串是否仍然相等。
rbegin()
和 rend()
是反向迭代器。有一个字符串构造函数,它以开始和结束迭代器作为参数。
string(inputString.rbegin(), inputString.rend())
所做的只是 return inputString 的反转。
string::rbegin
(反向开始)是反向字符串开头的迭代器(字符串的最后一个字符),string::rend
(反向结束)是反向字符串结尾的迭代器(字符串的第一个字符)。
字符串构造函数需要两个迭代器来创建一个新字符串,第一个是字符串的开头,第二个是字符串的结尾。
当您将 inputString
的反向开始和反向结束传递给构造函数时,它正在创建 inputString
.
的反向字符串
查看字符串构造函数:
...
(7) template <class InputIterator>
string (InputIterator first, InputIterator last);
您可以看到可以通过迭代器创建字符串。 rbegin/rend 迭代器是指向它们引用的相反位置的 InputIterators:
rend() -->"My string"<-- rbegin()
就是说,当您将 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)
最后,运算符==() 将检查字符串的等价性。
我最近来到回文问题的解决方案,但我不明白这部分代码是如何工作的(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()));
}
基本上,您要反转 inputString
,然后检查两个字符串是否仍然相等。
rbegin()
和 rend()
是反向迭代器。有一个字符串构造函数,它以开始和结束迭代器作为参数。
string(inputString.rbegin(), inputString.rend())
所做的只是 return inputString 的反转。
string::rbegin
(反向开始)是反向字符串开头的迭代器(字符串的最后一个字符),string::rend
(反向结束)是反向字符串结尾的迭代器(字符串的第一个字符)。
字符串构造函数需要两个迭代器来创建一个新字符串,第一个是字符串的开头,第二个是字符串的结尾。
当您将 inputString
的反向开始和反向结束传递给构造函数时,它正在创建 inputString
.
查看字符串构造函数:
...
(7) template <class InputIterator>
string (InputIterator first, InputIterator last);
您可以看到可以通过迭代器创建字符串。 rbegin/rend 迭代器是指向它们引用的相反位置的 InputIterators:
rend() -->"My string"<-- rbegin()
就是说,当您将 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)
最后,运算符==() 将检查字符串的等价性。