为什么会出现断言对话框:迭代器不可取消引用?

时间:2019-01-09 20:39:17

标签: c++ c++11 iterator

我目前正在阅读有关C ++ 11的书:“ Ray Lischner探索C ++ 11”。我喜欢它,因为我发现它在解释中非常有用且简单。 问题。这里的“清单13-2。局部变量定义”出现问题的地方:

int main() {

    std::vector<int> data{ 10, 57, 23, 81, 7, 5, 24 }; // I removed the line below in order not everytime I enter code.
//  data.insert(data.begin(), std::istream_iterator<int>(std::cin),
    //  std::istream_iterator<int>());
    for (std::vector<int>::iterator iter{ data.begin() }, end{ data.end() }; iter != end; ) {
        int value{ *iter };
        std::vector<int>::iterator here{ std::lower_bound(data.begin(), iter, value) };
        if (iter == here)
            ++iter; // already in sorted position
        else {
            // erase the out-of-position item, advancing iter at the same time.
            iter = data.erase(iter);
            data.insert(here, value);
        }
    }

    for (std::vector<int>::iterator iter{ data.begin() }, prev{ data.end() }, end{ data.end() };
    iter != end; ++iter) {
        if (prev != data.end())
            assert(not (*iter < *prev));
        prev = iter;
    }
    std::cout << '{';
    std::string separator{ " " };

    for (int element : data)
    {
        std::cout << separator << element;
        separator = ", ";
    }
    std::cout << " }\n";


    std::cout << std::endl;
    std::system("pause");
}
  • 因此,如您在上面所看到的,代码是对整数向量进行排序。但是,当我在MSVC14.0上运行程序时,会出现断言对话框:“向量迭代器不可取消引用”。 int value{*iter}

  • iter = data.erase(iter);的意义是什么?我的意思是返回值(这里返回值的意义是什么?我尝试写:data.erase(iter);并在GCC上像魅力一样工作。)。

我在ideone上尝试了GCC上的代码,它工作正常!?

请帮助我。预先谢谢你。

0 个答案:

没有答案