Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
SkyBy
Special user
34 / 34 / 16
Регистрация: 07.10.2013
Сообщений: 121
Завершенные тесты: 1
1

Struct / Vector / Expression: vector subscript out of range

01.05.2016, 20:48. Просмотров 384. Ответов 2

Добрый вечер.

Имеется структура:
C++
1
2
3
4
5
6
struct Contact
{
public:
    string name;
    vector<string> phoneNumber;
};
Фрагмент кода из функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void editContact(vector<Contact> &contacts, fstream &pbook)
{
    int key = -1;
    /*...*/
    //Если key после определенных действий остается равным -1, то return
        for (unsigned int i = 0; i < contacts[key].phoneNumber.size(); ++i)
        {
            cout << "1. Удалить номер " << contacts[key].phoneNumber[i] << "\n"
                << "2. Изменить номер " << contacts[key].phoneNumber[i] << "\n"
                << "3. Оставить без изменений номер " << contacts[key].phoneNumber[i] << "\n";
            do
            {
                cout << "Ввод >: ";
                cin >> choose;
            } while (choose != 1 && choose != 2 && choose != 3);
            if (choose == 1)
            {
                if (contacts[key].phoneNumber.size() == 1 && contacts.size() == 1)
                {
                    cout << "\nНевозможно удалить последний контакт.\n";
                }
                else if (contacts[key].phoneNumber.size() == 1 && contacts.size() > 1)
                {
                    contacts.erase(contacts.begin() + key);
                    cout << "\nКонтакт успешно удален\n";
                }
                else
                {
                    contacts[key].phoneNumber.erase(contacts[key].phoneNumber.begin() + i);
                    cout << "Номер успешно удален.\n";
                }
            }
        }
    /*...*/ 
}
Имеется файл file.dat
Код
Александр +12345*
Алексей +54321*
После обработки данного файла структура примет вид:
C++
1
2
contacts[0].name = "Александр", contacts[1].name = "Алексей";
contacts[0].phoneNumber[0] = "+12345", contacts[1].phoneNumber[0] = "+54321";
Если после всех действий, которые были выше, key = 0 (то есть имеет индекс первого элемента в структуре), то функция работает по всем критериям правильно:
1) При удалении номера → удаляет контакт (см. if (contacts[key].phoneNumber.size() == 1 && contacts.size() == 1))
2) При изменении номера → изменяет номер
3) Оставить без изменений → оставить без изменений

Проблема: если key > 1 (1, 2, ..., n), где n - количество контактов
То при обработке условия:
C++
1
2
3
4
5
else if (contacts[key].phoneNumber.size() == 1 && contacts.size() > 1)
{
    contacts.erase(contacts.begin() + key);
    cout << "\nКонтакт успешно удален\n";
}
Приложение падает:
Struct / Vector / Expression: vector subscript out of range
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2016, 20:48
Ответы с готовыми решениями:

Expression:vector subscript out of range
Написал программа, скинул в текстовый файл неотформатированный текс, все...

expression vector subscript out of range
Появляется ошибка при компиляции expression vector subscript out of range.Нужна...

Vector subscript out of range
Привет, друзья, у меня следующая проблема: if (!MeteorVec.empty()) {...

vector subscript out of range
Доброго времени суток! Подскажите пожалуйста, где именно я ошибся, вроде не...

Vector subscript out of range
Доброе утро, прочитал статью про векторы и решил создать один из них, однако...

2
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
01.05.2016, 20:55 2
break после cout добавь.
1
SkyBy
Special user
34 / 34 / 16
Регистрация: 07.10.2013
Сообщений: 121
Завершенные тесты: 1
01.05.2016, 21:12  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
break после cout добавь.
Спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2016, 21:12

Vector subscript out of range
Помогите пожалуйста, выводит такую ошибку , не пойму почему ...

Vector subscript out of range
int main() { srand( time(0) ); vector &lt;int&gt; m(10000); int i,n,c,max;...

Ошибка vector subscript out of range
Всем корректного. Читаю Страуструпа. В конце главы есть задание: в первый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru