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

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

Войти
Регистрация
Восстановить пароль
 
 
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
#1

Итераторы и с чем их есть - C++

06.04.2013, 07:35. Просмотров 498. Ответов 17
Метки нет (Все метки)

Есть vector<SomeClass> someArray. В SomeClass есть поле someField. Не могу для итератора vector'а someArray присвоить значение полю someField. Вылетает с:
Ошибка сегментирования (сделан дамп памяти)
ЧЯДНТ?
C++
1
2
3
4
vector<Action> buf_A;
buf_A.reserve(variables.size());
for (vector<Action>::iterator a = buf_A.begin(); a != buf_A.end(); a++,)
    a->action_name = "Stroka bes kotoroi ia jit ne mogu!");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2013, 07:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Итераторы и с чем их есть (C++):

Чем отличаются итераторы ::begin и ::cbegin? - C++
Чем отличаются итераторы ::begin и ::cbegin? Не пойму разницы, и с английским у меня не очень.

Итераторы и обратные итераторы - C++
У вектора есть два типа итераторов, обычные и обратные итераторы произвольного доступа... Обычные реализовал, осталось обратные. Решил...

Контейнерный класс, с чем есть? - C++
Парни, всем привет! Вот сижу с домашкой... Нужно сделать контейнерный класс для двух классов (книга и библиотека) на основе массива......

Что такое указатель и с чем его есть - C++
Я уже не знаю что делать, но в книжке очень непонятно написано про указатели. Не могли бы вы объяснить что такое указатели и зачем они. И...

Двумерный динамический массив, что и с чем есть? - C++
собственно как сделать Двумерный динамический массив. и как можно проверить его работу?

std::map что такое и с чем это есть - C++
попытался найти док-ию по map, но так и не нащёл. есть у кого ли нормальная док-ия по Map?

17
0x10
2526 / 1706 / 257
Регистрация: 24.11.2012
Сообщений: 4,270
06.04.2013, 07:45 #2
Ну падает, видимо, где-то в другом месте. Приведенный цикл вообще не будет выполнен ни разу, поскольку размер вектора buf_A - 0.
0
Kastaneda
Jesus loves me
Эксперт С++
4729 / 2933 / 242
Регистрация: 12.12.2009
Сообщений: 7,442
Записей в блоге: 2
Завершенные тесты: 1
06.04.2013, 07:49 #3
рабочий код именно так выглядет? Или это урезаный вариант?
Потому что в таком виде ошибки быть не должно, просто ни одной итерации не будет.
А так ты пытаешся присвоить значение поля еще не созданному объекту. reserve() только резервирует место в векторе, но не создает объектов.
Думаю ты хотел сделать что-то подобное
C++
1
2
3
4
5
vector<Action> buf_A;
buf_A.reserve(variables.size());
for (int i = 0; i < variables.size(); i++) {
    buf_A.push_back(Action());
    buf_A[i].action_name = "Stroka bes kotoroi ia jit ne mogu!");
0
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
06.04.2013, 07:55  [ТС] #4
Нет падает здесь. Просто я неудачно сократил код )). Вот оригинал:
C++
1
2
3
4
5
6
vector<Action> buf_A;
buf_A.reserve(variables.size());
vector<Action>::iterator a = buf_A.begin();
vector<VarArray>::iterator v = variables.begin();
for (; v != variables.end(); a++, v++)
    a->action_name = insertVariable(action_name, *v, vars_identificator);
Добавлено через 3 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
рабочий код именно так выглядет? Или это урезаный вариант?
Потому что в таком виде ошибки быть не должно, просто ни одной итерации не будет.
А так ты пытаешся присвоить значение поля еще не созданному объекту. reserve() только резервирует место в векторе, но не создает объектов.
Думаю ты хотел сделать что-то подобное
C++
1
2
3
4
5
vector<Action> buf_A;
buf_A.reserve(variables.size());
for (int i = 0; i < variables.size(); i++) {
    buf_A.push_back(Action());
    buf_A[i].action_name = "Stroka bes kotoroi ia jit ne mogu!");
Спасибо )). Action() как я понял даст пустой класс? Не знал...
0
0x10
2526 / 1706 / 257
Регистрация: 24.11.2012
Сообщений: 4,270
06.04.2013, 07:57 #5
Не пустой, а созданный с пом. конструктора по умолчанию. А в данном случае мб имеет смысл написать конструктор, который принимает строку. (хотя, конечно, не стоит, если по смыслу не вписывается)
0
Kastaneda
Jesus loves me
Эксперт С++
4729 / 2933 / 242
Регистрация: 12.12.2009
Сообщений: 7,442
Записей в блоге: 2
Завершенные тесты: 1
06.04.2013, 07:59 #6
Ты пытаешся что-то писать в пустой вектор, отсюда и ошибка.
1
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
06.04.2013, 08:16  [ТС] #7
Цитата Сообщение от Kastaneda Посмотреть сообщение
Ты пытаешся что-то писать в пустой вектор, отсюда и ошибка.
уже дошло )). Вместо резервирования изменил размер. Спасибо )))

Добавлено через 2 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
Не пустой, а созданный с пом. конструктора по умолчанию. А в данном случае мб имеет смысл написать конструктор, который принимает строку. (хотя, конечно, не стоит, если по смыслу не вписывается)
не впишется конструктор )
0
MrGluck
Модератор
Эксперт CЭксперт С++
7525 / 4663 / 704
Регистрация: 29.11.2010
Сообщений: 12,740
06.04.2013, 09:08 #8
Цитата Сообщение от Anion Посмотреть сообщение
не впишется конструктор )
если задача стоит лишь в создании объекта и последующее уникальное заполнение единственного его поля std::string (то бишь нигде не требуется заполнить другое поле с помощью конструктора с одним аргументом типа std::string), то конструктор как раз вписывается. Мало того, что это сэкономит лишнюю операцию, так еще и добавит конструирование уже осмысленного объекта, что ближе к реалиям природы.
0
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
10.04.2013, 08:07  [ТС] #9
Цитата Сообщение от MrGluck Посмотреть сообщение
если задача стоит лишь в создании объекта и последующее уникальное заполнение единственного его поля std::string (то бишь нигде не требуется заполнить другое поле с помощью конструктора с одним аргументом типа std::string), то конструктор как раз вписывается. Мало того, что это сэкономит лишнюю операцию, так еще и добавит конструирование уже осмысленного объекта, что ближе к реалиям природы.
Я знаю что такое и для чего нужен конструктор. Но спасибо за объяснения.
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
10.04.2013, 08:11 #10
Цитата Сообщение от Anion Посмотреть сообщение
ЧЯДНТ?
А это ещё что за чемурдос?
0
Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219
10.04.2013, 09:00 #11
Цитата Сообщение от taras atavin Посмотреть сообщение
А это ещё что за чемурдос?
Я теперь тоже так буду вопрос ставить
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
10.04.2013, 09:11 #12
И? А что за чемудрос то ЧЯДНТ?
0
Kastaneda
10.04.2013, 09:12
  #13

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
ЧЯДНТ
интуитивно могу предположить, что это "Что Я Делаю Не Так".

0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
10.04.2013, 09:14 #14
У гугла спросил, он его не знает.
0
Kastaneda
10.04.2013, 09:17     Итераторы и с чем их есть
  #15

Не по теме:

я тож спросил, гугл говорит что вместе с ЧЯДНТ еще употребляется УМВР (У Меня Все Работает).

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2013, 09:17
Привет! Вот еще темы с ответами:

в коде ниже есть ошибки. в чем они и как их устранить? - C++
structure brother { char name; into age; sister kin; }a; structure sister { char name; into age;

Определить, есть ли в строке слова, в которых гласных больше чем согласных - C++
Подскажите пожалуйста, что не так в коде: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; int...

Угадать число от 1 до 100 за 7 попыток: есть ли более изящный подход, чем if/else? - C++
Задача заключается в том что нужно написать программу который угадывает число пользователя от 1 до 100 есть только 7 попыток. Я понимаю что...

Чем лучше открывать .h .И есть ли какие то рекомендации и предостережения в работе с ними? - C++
Посоветуйте, чем лучше открывать .h .И есть ли какие то рекомендации и предостережения в работе с ними?


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

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

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