Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 15.05.2019, 00:24   #1
Ramirez1995
Новичок
 
Регистрация: 15.05.2019
Сообщений: 2
Репутация: 10
По умолчанию Ошибка - Vector subscript out of range

Код:
#include "Bank.h"
 
Bank::Bank() {
}
 
Bank::Bank(const std::vector<Payer> &payers) {
    for (auto &payer:payers)
        this->payers.push_back(payer);
    createHashTable();
}
 
Bank::Bank(Bank &bank) {
    for (auto &payer:payers)
        this->payers.push_back(payer);
    createHashTable();
}
 
Bank::~Bank() {}
 
std::ostream &operator<<(std::ostream &os, const Bank &bank) {
    for (auto &payer : bank.payers)
        os << payer << std::endl;
    return os;
}
 
std::istream &operator>>(std::istream &in, Bank &bank) {
    Payer payer;
    while (in >> payer) {
        bank.payers.push_back(payer);
    }
    bank.createHashTable();
    return in;
}
 
std::vector<Payer> Bank::search(int payerAccount) {
    return hashTable.hashTable[payerAccount % hashTable.m];
}
 
void Bank::createHashTable() {
    loop:
    hashTable.hashTable.clear();
    hashTable.hashTable.resize(hashTable.m);
    for (auto &payer:payers) {
        int hash = payer.getPayerAccount() % hashTable.m;
        if (hashTable.hashTable[hash][0].getPayerAccount() != payer.getPayerAccount()) {
            hashTable.m += hashTable.k * hashTable.k;
            goto loop;
        } else {
            int i = 0;
            for (; i < hashTable.hashTable[hash].size(); i++)
                if ((hashTable.hashTable[hash][i]) == payer)
                    break;
            if (i == hashTable.hashTable[hash].size())
                hashTable.hashTable[hash].push_back(payer);
        }
    }
}
В сам класс я с мейне передаю : fin >> bank;
Пример заполнения файла :
1 2 3
4 5 6
7 8 9

(hashTable.hashTable[hash][0].getPayerAccount() != payer.getPayerAccount()) - На этом моменте выскакивает ошибка : expression vector subscript out of range ( Полный текст ошибки на скриншоте во вложении )
Изображения
 
Ramirez1995 вне форума   Ответить с цитированием
Старый 15.05.2019, 09:42   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,503
Репутация: 2631
По умолчанию

Ну так значит hashTable.hashTable[hash] пустой вектор
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка: string subscript out of range niggainsoul Помощь студентам 0 31.03.2019 11:41
Vector subscript out of range - Visual C++ BlackMesa Visual C++ 4 28.03.2018 19:34
Ошибка Subscript out of range ольгаг Microsoft Office Excel 5 01.10.2017 12:06
expression:vector subscript out of range whoami30 Общие вопросы C/C++ 7 18.12.2015 12:12
Subscript out of range -в чем ошибка Bape}l{ka Microsoft Office Excel 4 14.11.2011 16:26


05:53.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru