![]() |
|
Модераторы: bsa |
![]()
|
|
| TheDestroyer |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Здравствуйте.
Не получается правильно получать значения из вектора своего типа: Объявил тип:
Создаю в классе вектор этого типа:
Чтобы записывать в вектор пришлось сделать конструктор структуре (см. первый код). В функции заполняю вектор следующим образом:
А вот теперь надо работать с полученным вектором. Хочу найти в нем запись, делаю так:
Это неправильно. А вот как правильно? Также по этой теме интересуют следующие вопросы: 1. Обязательно ли добавлять в векор значения через конструктор определенного типа? Хотелось бы просто так: p_list.push_back.path("процесс"); ... 2. Смысл - иметь в векторе две записи для одного индекса. Может не структурой, а как-то подругому? |
||||||||
|
|||||||||
| andrew_121 |
|
||||||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Это называется - метод возвращающий вектор PROCESS-ов.
Здесь ты создаешь вектор с временем жизни равным телу этой функции. При возврате из функции вектор p_list уничтожается. Ты получаешь копию, в которой всегда содержится один элемент.
Здесь ты правильно делаешь. Но учитывая что вектор ВСЕГДА будет содержать ОДИН элемент, зачем его искать? А что нужно? Не понятно же.
Нет. Можно так:
Если этого не нужно, проверяй, есть ли этот элемент в векторе. Если объекты вектора имеют больше одного поля данных - только объектом. -------------------- Удалил аккаунт. Прощайте! |
||||||||
|
|||||||||
| xvr |
|
||||||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Еще нужен конструктор по умолчанию (без параметров).
Это сообщение отредактировал(а) xvr - 30.5.2009, 10:41 |
||||||||||||||||
|
|||||||||||||||||
| TheDestroyer |
|
||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
А точнее конкретное поле записи. Наверное неправильно выразился, но, естесственно, я заполняю вектор в цикле множеством записей:
Лучше возвращать указатель?
В том-то и дело, что я не понимаю как указать поле записи по которому нужно искать, если это вообще возможно. Похоже, необходимо сделать переменную типа PROCESS, в которой указать искомые поля и искать ее в векторе:
Но как поступить с поиском если известно только одно поле item.path, и надо найти в векторе по этому полю запись, чтобы выяснить какое значение имеет у найденной записи поле item.pid? Остается перебирать в цикле все записи вектора:
Или можно все-таки с find? |
||||||||||||
|
|||||||||||||
| xvr |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Лучше передавать параметром by-ref
(Я кстати описался, надо реализовывать не operator bool а operator ==)
|
||||||||||
|
|||||||||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
TheDestroyer, Выложите полный код. Поправлю, положу обратно. Пусть остальным польза будет.
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Последовал совету xvr, использую map для составления списка: процесс, PID.
Пришлось объявить глобальную переменную map<string,DWORD> p_list; Наверное можно и без глобальной, просто передавать ее при вызове функции, и очищать ее каждый раз не надо будет. Как просили, выкладываю код, (поиск списка процессов взять из примеров в инете). Его цель - поиск заданного процесса по пути запущенного файла и возвращение PID найденного процесса.
Это сообщение отредактировал(а) TheDestroyer - 31.5.2009, 01:01 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Немного неверный дизайн класса ProcUtil -
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
xvr, уже сделал
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Спасибо, разобрался.
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
TheDestroyer, Ну так выложи, чтоб остальным польза была.
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Выкладываю, единственное отличие от предыдущего выложенного кода - закомментированая переменная pszProcessName (может кому пригодится) и map<string,DWORD> p_list перенесен в private раздел класса. Конструктор делать не стал, т.к. назначение класса немного шире, чем просто получение списка процессов и каждый раз при объявлении не нужно получать этот список.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Тем более его не нужно получать каждый раз при вызове метода monitor, достаточно одного раза - первого
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |