Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 5.00
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
#1

Vector - out of range или выход за пределы - C++

30.07.2012, 10:46. Просмотров 3399. Ответов 41
Метки нет (Все метки)

Решил в своей программе динам. массивы заменить векторами. Вроде бы делаю все как надо, пушу конец... но когда i = 1000 то вылетает Expression: vector subscript out of range
C++
1
2
3
4
5
6
7
8
9
vector <double> mass_full(1000);
vector <double> mass_sum(1000);
iter = 512;
 
for(int i=0;i<iter*2;i++)
{
   mass_full.push_back(1); // тут и 1 пробовал, и i, но не помагает 
   mass_full.at(i+iter) = mass_sum[i];
}
я так понимаю, когда пишу mass_full.push_back(1), то резервируется 1 элемент
help plz
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2012, 10:46     Vector - out of range или выход за пределы
Посмотрите здесь:

expression vector subscript out of range C++
vector subscript out of range C++
C++ Vector subscript out of range (push_back, a не [])
C++ Vector iterator + offset out of range
C++ Vector subscript out of range
C++ Ошибка: Vector subscript out of range
C++ Vector subscript out of range
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.07.2012, 10:53     Vector - out of range или выход за пределы #2
Ну так у вас же в условии цикла i<iter*2 == 1024, а резмер масссивов 1000.
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
30.07.2012, 10:57  [ТС]     Vector - out of range или выход за пределы #3
Цитата Сообщение от yuron_477 Посмотреть сообщение
Ну так у вас же в условии цикла i<iter*2 == 1024, а резмер масссивов 1000.
а push_back не прибавляет на 1? т.е. не будет после первого прохода цикла 1001?
тогда я не понимаю как память будет выделятся динамически... мне в моей программе не известно сколько элементов будет заранее
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.07.2012, 11:01     Vector - out of range или выход за пределы #4
Размер mass_sum - 1000, и нигде не увеличивается. А счетчик идет до 1023
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:04     Vector - out of range или выход за пределы #5
Цитата Сообщение от Tailor Посмотреть сообщение
я так понимаю, когда пишу mass_full.push_back(1), то резервируется 1 элемент
Тут вы 1 помещаете в конец вектора.

Цитата Сообщение от Tailor Посмотреть сообщение
мне в моей программе не известно сколько элементов будет
Тогда можно вообще не задавать размер вектора, а добавляйте элементы через mass_full.push_back(). Тогда память и будет выделяться динамически.
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
30.07.2012, 11:08  [ТС]     Vector - out of range или выход за пределы #6
хорошо, а как написать, чтобы память все таки выделялась динамически? Вот надо мне посчитать что-то с 1000 элементов, потом 2000, или 10 000. Не буду же я писать
vector <double> mass_full(3000000000);

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
Тут вы 1 помещаете в конец вектора.


Тогда можно вообще не задавать размер вектора, а добавляйте элементы через mass_full.push_back(). Тогда память и будет выделяться динамически.
понятно, благодарствую
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:09     Vector - out of range или выход за пределы #7
Например:
C++
1
2
3
4
5
6
7
8
 
vector <double> mass_full();
vector <double> mass_sum(1000, 0);
 
for(int i=0;i<1000;i++)
{
   mass_full.push_back(mass_sum[i]); 
}
Заполнит mass_full нолями из mass_sum.
В mass_full, при применении push_back, память будет выделяться динамически.
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.07.2012, 11:10     Vector - out of range или выход за пределы #8
Не надо изначально задавать размер вектора. Метод push_back() сам динамически увеличит его размер. То есть:

C++
1
2
3
4
vector <int> vec; // в векторе нет элементов
 
vec.push_back(34); // теперь в векторе один элемент со значением 34
vec.push_back(67); // теперь два элемента (34 и 67)
Jupiter
30.07.2012, 11:11
  #9

Не по теме:

alsav22, это

Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
vector <double> mass_full();
прототип функции, а не вектор

nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
30.07.2012, 11:17     Vector - out of range или выход за пределы #10
Jupiter, разве? По этой логике и
int a(); - тоже прототип? Разве здесь не конструктор?
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:20     Vector - out of range или выход за пределы #11
Есть такой метод вектора как resize(). Параметр задаёт новый размер вектора. Для быстроты операций с вектором, можно предварительно зарезервировать за ним память методом reserve(). Параметр - ёмкость вектора (но не размер, не путать).

Добавлено через 2 минуты
Цитата Сообщение от Jupiter Посмотреть сообщение
прототип функции, а не вектор
Прошу прощения, описка.
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
30.07.2012, 11:21  [ТС]     Vector - out of range или выход за пределы #12
А вот еще вопрос, есть старый код

C++
1
2
3
4
for(int i=0;i<iter;i++)
{
   mass_full[i] = 0;
}
Если тоже самое написать с пуш беком


C++
1
2
3
4
for(int i=0;i<iter;i++)
{
   mass_full.push_back(mass_full[i]=0);
}
так?
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:22     Vector - out of range или выход за пределы #13
Цитата Сообщение от nexen Посмотреть сообщение
По этой логике и
int a(); - тоже прототип?
Конечно, прототип. Функция a, ничего не принимает, возвращает int.
Jupiter
30.07.2012, 11:23
  #14

Не по теме:

Цитата Сообщение от nexen Посмотреть сообщение
int a(); - тоже прототип?
именно
Цитата Сообщение от nexen Посмотреть сообщение
разве?
не веришь, так скомпилируй

alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:32     Vector - out of range или выход за пределы #15
Цитата Сообщение от Tailor Посмотреть сообщение
так?
C++
1
2
3
4
for(int i=0;i<iter;i++)
{
   mass_full.push_back(0);
}
Заполнит mass_full iter-1 нолём.
novi4ok
550 / 503 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
30.07.2012, 11:38     Vector - out of range или выход за пределы #16
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
for(int i=0;i<iter;i++)
{
   mass_full.push_back(0);
}
Заполнит mass_full iter-1 нолём.
уточнение: не iter-1, a iter. т.е. в результате длина вектора будет iter (если до того был пустой, разумеется)

но проще так:

C++
1
2
mass_full.clear();
mass_full.resize (iter, 0);
так можно хоть нулями, хоть чем угодно (правда, все одинаковое)
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:41     Vector - out of range или выход за пределы #17

Не по теме:

nexen, сам посуди, как тогда компилятор разбирался бы в таком: vector<int> f();

. То ли это прототип функции, которая возвращает vector<int>, то ли объявление объекта типа vector<int> и инициализация его конструктором по умолчанию.
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.07.2012, 11:44     Vector - out of range или выход за пределы #18
Цитата Сообщение от Tailor Посмотреть сообщение
А вот еще вопрос, есть старый код
А так не проще?
C++
1
2
const int iter = 500;
vector<int> vec(iter, 0);
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:44     Vector - out of range или выход за пределы #19
Цитата Сообщение от novi4ok Посмотреть сообщение
уточнение: не iter-1, a iter
Да. Прошу прощения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2012, 11:44     Vector - out of range или выход за пределы
Еще ссылки по теме:

Vector subscript out of range C++
C++ Vector out of range
Vector subscript out of range C++
C++ Ошибка vector subscript out of range
C++ Expression:vector subscript out of range

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

Или воспользуйтесь поиском по форуму:
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
30.07.2012, 11:44  [ТС]     Vector - out of range или выход за пределы #20
вот все кажется понял, а как к примеру заумную операцию перевести
C++
1
2
3
4
for(int i=0;i<iter;i++)
{
   mass_full[i+iter] = mass_sum[i];
}
Yandex
Объявления
30.07.2012, 11:44     Vector - out of range или выход за пределы
Закрытая тема Создать тему
Опции темы

Текущее время: 05:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru