|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
||||||
Сериализация и десериализация vector'а int'ов05.03.2011, 16:26. Показов 6583. Ответов 15
Метки нет (Все метки)
Имею вектор:
Помогите пожалуйста реализовать Спасибо
0
|
||||||
| 05.03.2011, 16:26 | |
|
Ответы с готовыми решениями:
15
Сериализация и десериализация дерева
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 05.03.2011, 16:33 | ||||||
|
Union, Я бы просто считал вектор в файл - считал вектор из файла... Не вижу резона делать чего-либо другого...
1
|
||||||
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 05.03.2011, 17:23 [ТС] | |
|
Посмотрел данный метод, вектор записывается в файл поэлементно через разделитель \n + каждый элемент конвертируется из int в string. А можно ли как-нибудь записывать в бинарном виде? Нужна максимальная производительность, в приложении постоянно копируются вектора по 500-900 тыс элементов. М.б.можно как-то через memcpy сразу по нескольку элементов копировать?
Спасибо. Добавлено через 27 минут Можно ли записывать Int'ы без конвертации в строки? Int = 4 байта - записывать 4 байта и потом считывать по 4 байта. Тогда разделитель \n не нужен. Каждые 4 байта соответствуют одному элементу в векторе.
0
|
|
|
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
|
|
| 05.03.2011, 18:12 | |
|
Union, открывай файл для бинарной записи.
0
|
|
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|||||||||||
| 05.03.2011, 19:02 [ТС] | |||||||||||
|
Это смао собой
Меня интересует реализация алгоритма вцелом. Т.е. не только как записать, но и как потом восстановить. В приведенном примере восстанавливается через разделитель \n. А так надо будет забирать по 4 байта.Добавлено через 46 минут
Впринципе разделитель я молгу убрать, но как заставить std::copy записывать int как int, без конвертации?
0
|
|||||||||||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 05.03.2011, 19:18 | |
|
я не силен в данной теме, но соображения
1) если это винда, то с помощью CreateFileMapping спроецировать файл в память с заданием размера 2) первым элементом записать int'ом размер вектора 3) с помощью memcpy записать весь вектор в духе memcpy( base, &v.front(), v.size() * sizeof(int) ); обратные действия понятны 1) открыть также файл для чтения 2) прочитать размер сделать v.resize( .. ) 3) с помощью memcpy ( &v.front(), base, v.size() * sizeof(int) ) под линь тоже маппинг делают, но тут уж не просвещен
0
|
|
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 05.03.2011, 19:26 [ТС] | |
|
1) К сожалению это linux (Ubunta)
![]() 2) Размер записывать вовсе необязательно, я могу его сохранить отдельно, в базе. В общем вся задача сводится к банальному копированию участка памяти. 3) Я искал возможность через memcpy прямиком скопировать вектор, т.к. при данных условиях по быстродействию это решение было бы оптимальным, а поэлементное копирование, да ещё и спреобразованием - расточительство. Пока про memcpy ничего не нашёл, жду, может кто здесь подскажет.
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 05.03.2011, 19:31 | |
|
0
|
|
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 05.03.2011, 19:35 [ТС] | |
|
Я в приложении часто использую memcpy с char'ами, но не имею никакого представления насчёт вектора. Мои знания насчёт вектора и stl вообще чисто поверхностные - это принцип работы, что такое итераторы и т.д. В общем я не знаю как применить memcpy в этой задаче...
0
|
|
|
|
||||||
| 05.03.2011, 19:37 | ||||||
|
читает и пишет блок памяти вроде как
1
|
||||||
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 05.03.2011, 19:46 [ТС] | |
|
igorrr37 спасибо за пример, но опять же лишние операции используются...
Вот я нашел темы про копирование вектора через memcpy: std::vector<>::iterator в VS6 и VS2008 http://en.wikipedia.org/wiki/Std::vector http://bytes.com/topic/c/answe... or-c-array Помогите применить
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||
| 05.03.2011, 19:57 | ||
|
Union, я писал уже как копировать, однакож кто читает?
0
|
||
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
||||||
| 05.03.2011, 20:22 [ТС] | ||||||
|
alex_x_x извиняюсь, зациклился на записи, поэтому не стал читать после "обратные действия понятны"
![]() Тем неменее в тех темах более полный код. Мне уже кажется что записать в файл через memcpy по некоторым причинам не возможно... Добавлено через 18 минут Если это возможно, должно быть как-то так:
И помоему копировать в дескриптор через memcpy некорректно...Наверно нужно использовать промежуточный буфер, который будет заполняться через memcpy, а далее уже через std::copy закидывать его в файл. Я прав?
0
|
||||||
|
|
|
| 05.03.2011, 20:49 | |
|
Union, какие ещё лишние операции?
reinterpret_cast<char*>(&v[0]) - приведение указателей. В memcpy будет неявное приведение к void*; v.size()<<2 - вычисление размера vector<int> в байтах, для memcpy это тоже потребуется
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|||||||
| 05.03.2011, 21:02 | |||||||
Добавлено через 11 минут igorrr37, все хорошо, но int разным по размеру бывает
1
|
|||||||
|
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
|
|
| 05.03.2011, 22:28 | |
|
А зачем приведение указателей? Насколько мне известно memcpy разом копирует n байт, в то время как все остальные функции копируют побайтно.
Я так понял тс не хочет перебирать вектор итератором поэлементно, а хочет скопировать его целиком как единый кусок памяти, воспользовавшись свойством memcpy?
0
|
|
| 05.03.2011, 22:28 | |
|
Помогаю со студенческими работами здесь
16
Сериализация/Десериализация Сериализация и десериализация Сериализация и десериализация Сериализация / десериализация
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|