iyantik 2022-04-28 19:11 采纳率: 50%
浏览 489
已结题

can't deference out of range vector iterator报错

输入visit时候报错,page和user指令运行正常。
该修改哪部分代码呢

#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<vector>

using namespace std;

struct Page {
    int id;
    string path;
    int counter;
    Page(int id, string path) {
        this->id = id;
        this->path = path;
        counter = 0;
    };
};

// This function can facilitate sorting
bool operator<(const Page& a, const Page& b) {
    return (a.id < b.id);
}

vector<Page> pages;

struct User {
    int id;
    vector<string> visits;
    User(int id) {
        this->id = id;
    };
    void add_visit(int page_id) {
        Page p(page_id, "");
        vector<Page>::iterator iter = lower_bound(pages.begin(), pages.end(), p);
        if (iter->id == page_id)
            visits.push_back(iter->path);
    };
    int size() const {
        return visits.size();
    };
    void print_visits() {
        sort(visits.begin(), visits.end());
        vector<string>::iterator iter;
        for (iter = visits.begin(); iter != visits.end(); iter++) {
            cout << "- " << *iter << endl;
        }
    }
};

vector<User> users;

// Please implement the following function to facilitate the sorting of users
bool operator<(const User& a, const User& b) {
    return a.visits.size() < b.visits.size();
}

// Please implement the following function
void add_page(const Page& p) {
    pages.push_back(p);
}

// Please implement the following function
bool cmp_page_count(const Page& a, const Page& b) {
   return a.counter > b.counter;

  
}

// Please implement the following function
void print_pages(int number) {
    for (int i = 0; i < number; i++) {
        cout << pages[i].counter << ":/" << pages[i].path << endl;
    }
}

// Please implement the following function
void add_user(User u) {
    users.push_back(u);
}

// Please implement the following function
void add_visit(int page_id) {
    vector<User>::iterator iter = users.end();
    iter->add_visit(page_id);
}

// Please implement the following function
void print_users(int number) {
    for (int i = 0; i < number; i++) {
        cout << users[i].size() << ":" << users[i].id << endl;
        users[i].print_visits();
    }
}



int main() {

    string type;
    while (cin >> type) {
        if (type == "USER") {
            int user_id;
            cin >> user_id;
            User u(user_id);
            add_user(u);
        }
        else if (type == "PAGE") {
            int page_id;
            string page_path;
            cin >> page_id;
            cin >> page_path;
            Page p(page_id, page_path);
            add_page(p);
        }
        else if (type == "VISIT") {
            int page_id;
            cin >> page_id;
            Page p(page_id, "");
            vector<Page>::iterator iter = lower_bound(pages.begin(), pages.end(), p);
            if (iter->id == p.id) {
                iter->counter++;
            }
            add_visit(p.id);
        }
    }
    sort(pages.begin(), pages.end(), cmp_page_count);
    cout << "*** 5 most popular pages ***" << endl;
    print_pages(5);
    sort(pages.begin(), pages.end());

    sort(users.begin(), users.end());
    cout << "*** 5 most active users ***" << endl;
    print_users(5);

    return 0;

}


img


标注// Please implement the following function是我自己写的代码,所以问题也大概在这范围内

  • 写回答

2条回答 默认 最新

  • 关注

    你所有的迭代器,再使用前没有判断是否合法:
    (1)第36行
    if (iter->id == page_id)
    改成
    if ( iter != pages.end() && iter->id == page_id)
    (2)第84行 add_visit函数中
    vector< User >::iterator iter = users.end();这里,iter指向了vector的末尾,迭代器的末尾是vector最后一个元素的下一个位置,也就是说iter已经不在vector中了,所以,在第85行使用 iter->add_visit(page_id); 就是错误的。这个问题会让你的程序在运行visit指令的时候崩溃。这个函数的逻辑有问题,根据你的需要修改一下。我不知道你要实现什么功能,没法帮你改了。
    (3)第121行,也是在使用前没有判断是否合法
    if (iter->id == p.id)改成
    if ( iter != pages.end() && iter->id == p.id)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月28日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: