You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:32:51