Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Структуры данных |
Автор: svk521 26.6.2007, 12:33 | ||
Здравствуйте! подскажите, пожалуйста, каким образом можно наиболее рационально реализовать следующую задачу: Ведется перехват пакетов по сети при помощи библиотеки WinPcap, далее предполагается помещать информацию в базу данных (с этим проблем нет). Каким образом можно удерживать в виртуальной памяти информацию о пакетах в течении определенного интервала времени (например 5 минут), проверять каждый новый пришедший пакет с уже имеющимися, и при выполнении определенных условий либо добавлять информацию о пакете как новый элемент, либо проводить с пакетом какие-то иные действия? (получается работа с массивом, каждым элементом которого является структура, и размер такого массива заранее не известен) Мое решение - это использовать структуры данных, имеющих указатель на следующий элемент, но вот почитал книжки и вероятно можно еще использовать массив связных списков, но вот точнее мне солжно разобраться.. Привожу описание структуры:
|
Автор: Nat 26.6.2007, 12:47 |
В таких случаях удобно использовать вектор из STL. В хедере объявляют std::vector<STRUKTURA>struktura_v; //вектор std::vector<STRUKTURA>::iterator struktura_p; //указатель а в программе в конец вектора записывают новые элементы (структуры) с помощью push_back. |
Автор: Lazin 26.6.2007, 12:52 | ||
Если нужно часто удалять - добавлять пакеты, то лучше использовать std::list. |
Автор: Lazin 26.6.2007, 13:44 | ||||
при большом размере структуры и активном использовании, бдет часто происходить изменение размеров массива, следовательно его копирование. Тогда лучше использовать ветор указателей на структуру, копирование намного быстрей будет происходить. |
Автор: Fazil6 26.6.2007, 14:11 | ||
вопервых изменение размера массива никак не зависит от размера структуры, а зависит от количества элементов, во-вторых при использовании vector можно избавиться от перераспределения вызовом reserve, в-третих при использовании очереди гарантируется остсутствие копирования элементов при вставке нового и самое главное. Сложно и нежелательно хранить указатели в контейнерах. Если приходится работать с указателями, то тогда это желательно делать через интелектуальные указатели. И в отношении структуры из первого поста, то комп не надорвется такую структуру копировать. |
Автор: svk521 26.6.2007, 17:30 |
Спасибо большое всем отозвавшимся!!! Вы мне столько всего несоветовали.. теперь надо будет разобраться с каждым сообщением и почитать про vector, list. Про очередь я уже тоже думал, но не оказалось рядом советчика по конкретному примеру. Мне конечно было бы полезно если кто-нибудь приведет код-пример, на парочке элементов в случае использования vectora ![]() |
Автор: Fazil6 26.6.2007, 18:37 | ||||
vector позволяет работать с собой как с обычным массивом
|
Автор: svk521 27.6.2007, 05:39 | ||||
это под Visual C++ ? Мне надо С++ Builder... |
Автор: zkv 27.6.2007, 06:33 |
это под буст ![]() |
Автор: svk521 27.6.2007, 12:40 |
![]() я уже разобрался и скачал нужную библиотеку!! Спасибо |
Автор: svk521 3.7.2007, 16:46 | ||
Спасибо большое за приведенный прмер, он мне очень помог. Вот только желаемого я так и не могу найти. Каким образом просматривать элементы вектора в моем случае? я использую
Заранее спасибо за ответ! |
Автор: JackYF 3.7.2007, 17:41 | ||
svk521,
Проход по вектору vt с действиями над i-м элементом. |
Автор: Fazil6 3.7.2007, 17:44 | ||
доступ по индексу как с обычным массивом
|
Автор: svk521 3.7.2007, 18:22 | ||||
да-да -да только ЭЛЕМЕНТАМИ ВЕКТОРА являются СТРУКТУРЫ
Вот таким образом обращаюсь к элементам структуры
Мне кажется что в данном случае не правильно обращаюсь к элементам структуры через вектор |
Автор: JackYF 3.7.2007, 18:32 | ||
ну и что?
обращение правильное в твоем примере. |