Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
11 / 11 / 3
Регистрация: 06.08.2011
Сообщений: 208

Как в векторе объектов пользовательского класса изменить заданное поле у определённого элемента?

24.07.2016, 13:30. Показов 4252. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Создан вектор из структры:
C++
1
2
3
4
5
6
7
8
struct   man {
    char   name[32];
    int      age;
    man(void) {}
    man(const char* hName, const int hAge) {
    strcpy(name, hName);
    age = hAge;
    }
Заполнение вектора:
C++
1
2
3
4
    vector<man>  v;
    v.push_back( man("1", 0 ));
    v.push_back( man("2", 0 ));
    v.push_back( man("3", 0 ));
Поиск в векторе:
C++
1
2
3
4
5
6
char* number = "1";
 
   // поиск по-строке в структуре
   vector<man>::iterator  iter2 = find( v.begin(), v.end(),  number);
   if(iter2 != v.end() )
    printf("Name = %s,  age = %d\n", iter2->name, iter2->age);
Вывод программы:Name = 1, age = 0

как теперь у найденного элемента изменить поле age на ++1?
и в итоге получить Name = 1, age = 1

Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2016, 13:30
Ответы с готовыми решениями:

Как создать STL stack объектов пользовательского класса?
Всем привет! Скажите пожалуйста, как создать STL stack объектов пользовательского класса в WinForm C++. У меня постоянно ругается на память...

Как взаимодействовать со значением свойства пользовательского элемента в коде этого пользовательского элемента?
Здравствуйте. Я сделал пользовательский элемент, попытался создать в нём свойство и затем обработать его значение внутри этого элемента. Не...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив объектов класса из предыдущей лабы и в...

9
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.07.2016, 13:49
Лучший ответ Сообщение было отмечено Ирина197708 как решение

Решение

C++
1
++(iter2->age);
0
11 / 11 / 3
Регистрация: 06.08.2011
Сообщений: 208
24.07.2016, 13:53  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
1
++(iter2->age);
Спасибо, nmcf.
0
11 / 11 / 3
Регистрация: 06.08.2011
Сообщений: 208
27.07.2016, 15:42  [ТС]
не пойму, почему выходит ошибка на 6 строку?

C++
1
2
3
4
5
6
 candidates.push_back(Candidate('1',0));
 candidates.push_back(Candidate('2',0));
 candidates.push_back(Candidate('3',0));
 
char s = '1';
vector<Candidate>::iterator it1= std::find(candidates.begin(), candidates.end(), s);
error: no match for 'operator==' (operand types are 'Candidate' and 'const char')
{ return *__it == _M_value; }
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
27.07.2016, 16:07
Цитата Сообщение от Ирина197708 Посмотреть сообщение
не пойму, почему выходит ошибка на 6 строку?
Ну так оператор сравнения для структуры-то надо определить. Его алгоритм find использует для поиска.
1
11 / 11 / 3
Регистрация: 06.08.2011
Сообщений: 208
27.07.2016, 16:21  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну так оператор сравнения для структуры-то надо определить. Его алгоритм find использует для поиска.
Спасибо, подскажите как правильно определить.
0
 Аватар для shilko2013
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
27.07.2016, 16:32
Лучший ответ Сообщение было отмечено Ирина197708 как решение

Решение

Смотря что надо, если по имени то можно
C++
1
2
bool operator==(const man & a, const string & b) { return a.name == b; }
bool operator==(const string & a, const man & b) { return a == b.name; }
1
11 / 11 / 3
Регистрация: 06.08.2011
Сообщений: 208
27.07.2016, 16:37  [ТС]
shilko2013, спасибо. Помогло)
0
11 / 11 / 3
Регистрация: 06.08.2011
Сообщений: 208
28.07.2016, 16:58  [ТС]
Всем спасибо.
Только вот если структура вектора содержит оба поля int
C++
1
vector<Candidate>::iterator it1= std::find(candidates.begin(), candidates.end(), s);
не работает.
пишу так, но видимо так тоже неправильно:

C++
1
2
int k = 1;
vector<Candidate>::iterator it1= std::find(candidates.begin(), candidates.end(), std::bind(&Candidate::number), k);
Подскажите, как правильно осуществить поиск по полю number?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.07.2016, 20:25
C++
1
vector<Candidate>::iterator it1 = std::find_if(candidates.begin(), candidates.end(), [&](const Candidate c){ return c.number == k; });
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.07.2016, 20:25
Помогаю со студенческими работами здесь

Вектор объектов пользовательского класса
Привет всем! Есть класс Automaton, я пытаюсь создать вектор Sample с объектами этого класса, а они ведут себя не так, как я ожидаю -...

Как изменить цвет определенного слова в текстовом поле
пожалуйста как делать цвет помоги, только TextBox или RichTextBox. private void listBox2_SelectedIndexChanged(object sender,...

Организация коллекции объектов пользовательского класса
Есть некий пользовательский класс Mob. И есть класс MobAssistant, существующий для управления коллекцией объектов класса Mob. ...

Очистка вектора объектов пользовательского класса
Здравствуйте. Есть вектор std::vector&lt;Morphology*&gt; MorphCollection который заполняется следующим образом: Morphology *Morph = new...

Подсчет созданных объектов пользовательского класса
Создать класс SIGMOID таким образом, чтобы при уничтожении последнего объекта на экран выдавалось сообщение о наибольшее количество...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru