![]() |
|
![]() ![]() ![]() |
|
svk521 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Здравствуйте!
подскажите, пожалуйста, каким образом можно наиболее рационально реализовать следующую задачу: Ведется перехват пакетов по сети при помощи библиотеки WinPcap, далее предполагается помещать информацию в базу данных (с этим проблем нет). Каким образом можно удерживать в виртуальной памяти информацию о пакетах в течении определенного интервала времени (например 5 минут), проверять каждый новый пришедший пакет с уже имеющимися, и при выполнении определенных условий либо добавлять информацию о пакете как новый элемент, либо проводить с пакетом какие-то иные действия? (получается работа с массивом, каждым элементом которого является структура, и размер такого массива заранее не известен) Мое решение - это использовать структуры данных, имеющих указатель на следующий элемент, но вот почитал книжки и вероятно можно еще использовать массив связных списков, но вот точнее мне солжно разобраться.. Привожу описание структуры:
|
|||
|
||||
Nat |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 16.4.2007 Репутация: нет Всего: нет |
В таких случаях удобно использовать вектор из STL.
В хедере объявляют std::vector<STRUKTURA>struktura_v; //вектор std::vector<STRUKTURA>::iterator struktura_p; //указатель а в программе в конец вектора записывают новые элементы (структуры) с помощью push_back. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 18 Всего: 154 |
Если нужно часто удалять - добавлять пакеты, то лучше использовать std::list. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
забей... Не надо тебе это. std::vector спасет Отца Русской демократии.
это справедливо только если требуется вставка в определенную позицию, а здесь нужен std::vector или может быть очередь std::queue или std::deque Это сообщение отредактировал(а) Fazil6 - 26.6.2007, 13:24 |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 18 Всего: 154 |
при большом размере структуры и активном использовании, бдет часто происходить изменение размеров массива, следовательно его копирование. Тогда лучше использовать ветор указателей на структуру, копирование намного быстрей будет происходить. |
||||
|
|||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
вопервых изменение размера массива никак не зависит от размера структуры, а зависит от количества элементов, во-вторых при использовании vector можно избавиться от перераспределения вызовом reserve, в-третих при использовании очереди гарантируется остсутствие копирования элементов при вставке нового и самое главное. Сложно и нежелательно хранить указатели в контейнерах. Если приходится работать с указателями, то тогда это желательно делать через интелектуальные указатели. И в отношении структуры из первого поста, то комп не надорвется такую структуру копировать. |
|||
|
||||
svk521 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Спасибо большое всем отозвавшимся!!!
Вы мне столько всего несоветовали.. теперь надо будет разобраться с каждым сообщением и почитать про vector, list. Про очередь я уже тоже думал, но не оказалось рядом советчика по конкретному примеру. Мне конечно было бы полезно если кто-нибудь приведет код-пример, на парочке элементов в случае использования vectora ![]() |
|||
|
||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
vector позволяет работать с собой как с обычным массивом
|
||||
|
|||||
svk521 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
это под Visual C++ ? Мне надо С++ Builder... |
||||
|
|||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 1 Всего: 92 |
||||
|
||||
svk521 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
![]() я уже разобрался и скачал нужную библиотеку!! Спасибо |
|||
|
||||
svk521 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
Спасибо большое за приведенный прмер, он мне очень помог.
Вот только желаемого я так и не могу найти. Каким образом просматривать элементы вектора в моем случае? я использую
Заранее спасибо за ответ! |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 4 Всего: 162 |
svk521,
Проход по вектору vt с действиями над i-м элементом. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
доступ по индексу как с обычным массивом
Это сообщение отредактировал(а) Fazil6 - 3.7.2007, 17:44 |
|||
|
||||
svk521 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 30.3.2007 Репутация: 1 Всего: 1 |
да-да -да
только ЭЛЕМЕНТАМИ ВЕКТОРА являются СТРУКТУРЫ
Вот таким образом обращаюсь к элементам структуры
Мне кажется что в данном случае не правильно обращаюсь к элементам структуры через вектор Это сообщение отредактировал(а) svk521 - 3.7.2007, 18:23 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |