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

时间:2019-07-29 06:48:24

标签: vector assertion

在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并且循环将结束。

1 个答案:

答案 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的条件。