首页 > 解决方案 > 在 C++ 中取消引用迭代器行为

问题描述

我试图弄清楚为什么取消引用空列表迭代器会阻止其余代码运行。注释掉这条线,一切看起来都很好,但是把它留在里面,程序似乎没有超过那个点。

我想这应该是一个错误,因为列表是空的,但我没有收到任何警告或错误。

我正在使用 MinGW 的代码块

    std::list<std::string> slist;
    std::string word;

    auto iter = slist.begin();

    //what is this doing?
    std::cout << (*iter) << std::endl;

    while(std::cin >> word)
    {
        iter = slist.insert(iter, word);
    }

    slist.insert(slist.begin(), {"foo", "bar"});
    for(auto item: slist)
        std::cout << item << std::endl;

标签: c++c++11iterator

解决方案


std::list是空的!取消引用意味着您正在尝试使用未定义的内容。这是错误的。你绝对不应该那样做。

你应该这样做

for (auto i : slist)
   std::cout << i << std::endl;

这是安全的。


推荐阅读