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

Struct / Vector / Expression: vector subscript out of range - C++

01.05.2016, 20:48. Просмотров 359. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Struct / Vector / Expression: vector subscript out of range (C++):

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()) { for (int i = 0; i &lt; MeteorVec.size(); i++) { ...

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

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

Vector subscript out of range
Помогите пожалуйста, выводит такую ошибку , не пойму почему #include&lt;iostream&gt; #include&lt;vector&gt; #include&lt;stdio.h&gt; #include...

2
nmcf
6247 / 5559 / 2529
Регистрация: 14.04.2014
Сообщений: 23,376
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
int main() { srand( time(0) ); vector &lt;int&gt; m(10000); int i,n,c,max; while(i&lt;=10000) { m.push_back(rand()%4); i++; }...

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

Vector subscript out of range (push_back, a не [])
При попытке сделать push_back() вектору вылетает ошибка vector subscript out of range. Именно при пуше, не при операторе . Ошибка в...

Ошибка: Vector subscript out of range
Всю голову сломал, не вижу где ошибка...Выводит только первые 5 итераций, вместо 45... int ecc = 44; //Запись в массив...


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

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

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