Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

30.07.2012, 10:46. Просмотров 3708. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2012, 10:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Vector - out of range или выход за пределы (C++):

Struct / Vector / Expression: vector subscript out of range - C++
Добрый вечер. Имеется структура: struct Contact { public: string name; vector&lt;string&gt; phoneNumber; };

Vector out of range - C++
Проблема очень проста. Есть программа, которая считывает txt файл и выводит результат на консоль, есть переменная k1 которая должна...

Vector subscript out of range - C++
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 - C++
Доброе утро, прочитал статью про векторы и решил создать один из них, однако при выводе он выдаёт ошибку: &quot;Vector subscript out of range&quot;...

Vector subscript out of range - C++
Привет, друзья, у меня следующая проблема: if (!MeteorVec.empty()) { for (int i = 0; i &lt; MeteorVec.size(); i++) { ...

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

41
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.07.2012, 10:53 #2
Ну так у вас же в условии цикла i<iter*2 == 1024, а резмер масссивов 1000.
1
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
30.07.2012, 10:57  [ТС] #3
Цитата Сообщение от yuron_477 Посмотреть сообщение
Ну так у вас же в условии цикла i<iter*2 == 1024, а резмер масссивов 1000.
а push_back не прибавляет на 1? т.е. не будет после первого прохода цикла 1001?
тогда я не понимаю как память будет выделятся динамически... мне в моей программе не известно сколько элементов будет заранее
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.07.2012, 11:01 #4
Размер mass_sum - 1000, и нигде не увеличивается. А счетчик идет до 1023
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:04 #5
Цитата Сообщение от Tailor Посмотреть сообщение
я так понимаю, когда пишу mass_full.push_back(1), то резервируется 1 элемент
Тут вы 1 помещаете в конец вектора.

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

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


Тогда можно вообще не задавать размер вектора, а добавляйте элементы через mass_full.push_back(). Тогда память и будет выделяться динамически.
понятно, благодарствую
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:09 #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, память будет выделяться динамически.
1
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.07.2012, 11:10 #8
Не надо изначально задавать размер вектора. Метод push_back() сам динамически увеличит его размер. То есть:

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

Не по теме:

alsav22, это

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

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

Добавлено через 2 минуты
Цитата Сообщение от Jupiter Посмотреть сообщение
прототип функции, а не вектор
Прошу прощения, описка.
0
Tailor
3 / 3 / 0
Регистрация: 11.04.2012
Сообщений: 44
30.07.2012, 11:21  [ТС] #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);
}
так?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:22 #13
Цитата Сообщение от nexen Посмотреть сообщение
По этой логике и
int a(); - тоже прототип?
Конечно, прототип. Функция a, ничего не принимает, возвращает int.
1
Jupiter
30.07.2012, 11:23
  #14

Не по теме:

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

1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 11:32 #15
Цитата Сообщение от Tailor Посмотреть сообщение
так?
C++
1
2
3
4
for(int i=0;i<iter;i++)
{
   mass_full.push_back(0);
}
Заполнит mass_full iter-1 нолём.
1
30.07.2012, 11:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2012, 11:32
Привет! Вот еще темы с ответами:

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

Vector iterator + offset out of range - C++
Вылазит такая ошибка. Подскажите, из-за чего она может вылезти?

Expression:vector subscript out of range - C++
Написал программа, скинул в текстовый файл неотформатированный текс, все работало, как только отформатировал текст вручную появилась...

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


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

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

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