无法查找值初始化的向量迭代器?



我的程序在尝试在 while 循环中递增值时失败。 这是错误消息:

表达式:无法查找值初始化的向量迭代器

我认为这可能与vector.size()的返回类型有关,所以我尝试将it转换为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并且循环将结束。

首先,您对copy_backward()函数的使用充满了谬误,因为(根据我的假设)您试图通过将元素复制到新容器中来反转用户输入的元素的顺序,从新容器的末尾开始以相反的顺序将元素复制到新容器中,这在反转原始顺序方面是重要的,因为copy_backward()函数只是将元素复制到颠倒顺序,而不是实际颠倒元素的顺序。

其次,至于错误的实际来源,您要复制到的容器(reversed)是空的,这使得它太小而无法存储任何传递的数据,从而触发未定义的行为。

使用函数reverse_copy()将解决有关元素顺序反转的问题,函数back_inserter()将允许您将元素添加到空容器中,因为它构造了一个迭代器,可用于在容器末尾添加元素。

copy_backward()函数调用替换为以下函数调用:std::reverse_copy(toReverse.begin(), toReverse.end(), std::back_inserter(reversed))

此外,输入中的井(#)字符不会从存储在toReverse容器中的元素中过滤(根据我的假设,必须过滤)。在将元素添加到toReverse容器之前添加条件(如if (input != '#'))。

最新更新