在while循环中尝试增加值时,我的程序失败。 这是错误消息:“表达式:无法寻求值初始化的向量迭代器”。
我认为这可能与vector.size()的返回类型有关,因此我尝试将其强制转换为int。甚至不确定那是不是要考虑的事情。
int main() {
std::cout << "Please enter a string to reverse followed by the # key: \n";
std::vector<char> toReverse;
char input = ' ';
while (input != '#')
{
std::cin >> input;
toReverse.push_back(input);
}
std::vector<char>reversed{};
std::copy_backward(toReverse.begin(), toReverse.end(), reversed.end());
// check if it is a palindrome
bool isPalindrome = false;
int vectorLength{ 0 };
//int(toReverse.size());
while (vectorLength != (int)toReverse.size())
{
if (toReverse[vectorLength] == reversed[vectorLength])
{
isPalindrome = true;
}
else
{
isPalindrome = false;
break;
}
++vectorLength;
}
if (!isPalindrome)
{
std::cout << "reversed vector contains: ";
for (auto i : reversed) {
std::cout << i << " ";
}
}
else
{
std::cout << "You have entered a palindrome which is the same sequence when reversed!";
}
}
我希望while循环可以运行,将toReverse向量与反向向量进行比较,如果其中一个位置与另一个位置不相等,则isPalindrome将被设置为false并且循环将结束。
答案 0 :(得分:0)
首先,您对copy_backward()
函数的使用充满了谬误,因为(根据我的假设)您试图通过将元素复制到新容器中来反转用户输入的元素顺序。从新容器的末尾开始的相反顺序,这在颠倒原始顺序方面是很麻烦的,因为copy_backward()
函数仅以相反的顺序将元素复制到指定的容器,而不是实际上颠倒元素的顺序。
第二,关于错误的实际来源,您要复制到的容器(reversed
)是空的,这使其太小而无法存储任何传递的数据,从而引发未定义的行为。
使用函数reverse_copy()
将解决有关元素顺序反转的问题,而函数back_inserter()
将允许您将元素添加到空容器中,因为它构造了可以使用的迭代器在容器的末尾添加元素。
将copy_backward()
函数调用替换为以下函数调用:std::reverse_copy(toReverse.begin(), toReverse.end(), std::back_inserter(reversed))
。
此外,输入中的英镑(#
)字符不会从toReverse
容器中存储的元素中过滤掉(根据我的假设,该容器必须被过滤)。在将元素添加到if (input != '#')
容器之前,添加类似toReverse
的条件。