调用deque::end触发迭代器越界错误,求解决方案
问题分析与解决:deque::end()解引用异常
错误原因
deque::end()返回的是尾后迭代器,它指向容器最后一个元素的下一个位置,这个位置不存在有效元素,直接对其解引用属于越界访问,必然触发"cannot dereference out of range deque iterator"错误。
修复方案
要获取deque的最后一个元素,有两种可靠方式:
- 使用
deque::back()方法,直接返回最后一个元素的引用 - 使用
std::prev(city.end())获取指向最后一个元素的迭代器,再解引用(需要包含<iterator>头文件)
修改后的代码
以下是修复后的完整代码:
#include <iostream> #include <deque> #define lli signed long long int using namespace std; typedef struct cityData { lli height; lli index; } cityData; int main() { deque<cityData> city; lli cityCount; cin >> cityCount; for (lli i = 1; i <= cityCount; i++) { cityData input; cin >> input.height; input.index = i; city.push_back(input); } cout << "firstIndex: " << city.begin()->index << endl; // 方式1:直接调用back()获取最后一个元素 cout << "lastIndex: " << city.back().index << endl; // 方式2:用prev()移动迭代器到最后一个元素位置 // #include <iterator> // cout << "lastIndex: " << prev(city.end())->index << endl; }
验证结果
输入给定的测试数据后,程序会正常输出:
firstIndex: 1 lastIndex: 10
内容的提问来源于stack exchange,提问作者Oportunitas
相关产品推荐
相关产品推荐

