c++ - 在 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;
解决方案
嗯std::list
是空的!取消引用意味着您正在尝试使用未定义的内容。这是错误的。你绝对不应该那样做。
你应该这样做
for (auto i : slist)
std::cout << i << std::endl;
这是安全的。
推荐阅读
- visual-studio-code - 每当我尝试将所选文本包含在花括号中时,它都会被包含在单引号中,这非常烦人
- spring - 如果我只使用 RestController,它仍然是 Spring MVC 吗?
- express - CORS 问题:预检请求不允许重定向
- flutter - Flutter Android Studio(医生检查崩溃)
- javascript - HMAC - 通过 Postman 进行 SHA256 身份验证
- node.js - ReferenceError:FirebaseFirestore 未定义 Firebase 函数
- powerbi - 从另一个数据集 Power BI 的记录中搜索列
- python - 在 manage.py runserver 之后 Python Django 错误“没有名为 ...”的模块。我是否正确组织了我的文件?
- bash - 在 bash 脚本中,如何引用文件作为交互式提示的输入
- javascript - 未在 javascript 中定义未捕获的引用错误