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

Вставить значения в вектор - C++

Восстановить пароль Регистрация
 
unandro
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
18.05.2012, 22:19     Вставить значения в вектор #1
Пытаюсь вставить значения в вектор, но при запуске программы получаю ошибку сегментирования, ошибка пропадает если после добавления прерывать цикл, но это решение не подходит, как я понимаю нужно постоянно изменять размер вектора чтобы не получать ошибки, как это можно реализовать?
C++
1
2
3
4
5
6
7
8
9
    for(vector<Position>::iterator i = rabbit.begin(); i != rabbit.end(); ++i)
    {
        if(i->day % 6+1)
        {
            Position Rabbit = { i->x, i->y, 0, 0 };
            rabbit.push_back(Rabbit);
            break;
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2012, 22:19     Вставить значения в вектор
Посмотрите здесь:

C++ Вставить в вектор новый элемент перед элементом с заданным индексом
вектор: максимальное и минимальное значения C++
C++ Аргумент Х изменяется от начального значения 6 до конечного значения 8 с шагом 2, вектор А состоит из 6 элементов
В двумерном массиве, по столбцам найти отрицательные значения и написать их в вектор C++
C++ Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с произвольным кол-во элементов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
18.05.2012, 22:28     Вставить значения в вектор #2
Приведите весь код в том числе класса Position
И вы уверены что ошибка происходит именно при вставке, а не при доступе к элементу вектора?
unandro
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
18.05.2012, 22:40  [ТС]     Вставить значения в вектор #3
Cам векторный массив
C++
1
2
3
4
5
6
7
8
9
class Position
{
    public:
        int x;
        int y;
        int day;
        int hungry;
};
vector<Position> rabbit;
В головной функции заполняю его
C++
1
2
3
4
5
    for(int i = 0; i < number_point; ++i)
    {
        Position rabbit0 = { rand() % N * step + step / 2, rand() % N * step + step / 2, rand()%30, 0 };
        rabbit.push_back(rabbit0);
    }
Дальше соответственно таймером прогоняю код выше....
Думаю что доступ есть, т.к. с прерыванием я получаю добавление еще 1 зайца от первого выполняющего условие, но если встречается 2 зайца выполняющие условия то цикл то уже прерван...
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
18.05.2012, 22:54     Вставить значения в вектор #4
Ну судя по всему ошибка где то в ином месте потому как код
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
using namespace std;
 
struct Position
{
  int x;
  int y;
  int day;
  int hungry;
};
vector<Position> rabbit;
//-------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
int number_point=10;int N=5;int step=3;// беру отфонаря
 
for(int i = 0; i < number_point; ++i)
 {
 Position rabbit0 = { rand() % N * step + step / 2, rand() % N * step + step / 2, rand()%30, 0 };
 rabbit.push_back(rabbit0);
 }
 
for(vector<Position>::iterator i = rabbit.begin(); i != rabbit.end(); ++i)
 if(i->day % 6+1)
 {
 Position Rabbit = { i->x, i->y, 0, 0 };
 rabbit.push_back(Rabbit);
 break;
 }
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Не выдает ошибки

Хотя первый раз вижу запись для инициализации структуры
C++
1
Position rabbit0 = { rand() % N * step + step / 2, rand() % N * step + step / 2, rand()%30, 0 };
unandro
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
18.05.2012, 22:58  [ТС]     Вставить значения в вектор #5
конечно не выдает, Вы же тоже прерываете его...
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
18.05.2012, 23:02     Вставить значения в вектор #6
конечно не выдает, Вы же тоже прерываете его...
Что вы имеете введу под "прерыванием"?

Добавлено через 1 минуту
C++
1
break; //???
unandro
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
18.05.2012, 23:08  [ТС]     Вставить значения в вектор #7
тьфу, нужно делать цикл->условие->цикл, затупил
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
18.05.2012, 23:14     Вставить значения в вектор #8
У тебя без break бесконечный цикл по тому как одинаковые элементы просто множаться попадая под условие
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2012, 23:18     Вставить значения в вектор
Еще ссылки по теме:

C++ Не получается вставить элемент в вектор
C++ Вставить данные типа float в вектор
Вектор: вставить новый элемент после последнего положительного C++

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

Или воспользуйтесь поиском по форуму:
unandro
2 / 2 / 0
Регистрация: 10.12.2011
Сообщений: 61
18.05.2012, 23:18  [ТС]     Вставить значения в вектор #9
мне и нужен бесконечный цикл, для увеличение кол-ва зайцев в определенный момент их жизни
Yandex
Объявления
18.05.2012, 23:18     Вставить значения в вектор
Ответ Создать тему
Опции темы

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