Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2019, 23:24   #1
Ramirez1995
Новичок
Джуниор
 
Регистрация: 14.05.2019
Сообщений: 2
По умолчанию Ошибка - 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 ( Полный текст ошибки на скриншоте во вложении )
Изображения
Тип файла: png Снимок.PNG (18.5 Кб, 104 просмотров)
Ramirez1995 вне форума Ответить с цитированием
Старый 15.05.2019, 08:42   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну так значит hashTable.hashTable[hash] пустой вектор
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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