Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование std::vector в void*, Как лучше копировать контейнеры 
V
    Опции темы
C/L
Дата 1.4.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



Цитата(xvr @  1.4.2009,  12:34 Найти цитируемый пост)
Если то, что копируется не является POD или структурой/юнионом из POD'ов

К сожалению не знаю что такое POD. Структура простая, но имеется конструктор, простой, никаких указателей он не инициализирует.

Добавлено через 50 секунд
Виртуальных методов тоже нету
PM MAIL WWW ICQ   Вверх
zim22
Дата 1.4.2009, 11:00 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(C/L @  1.4.2009,  10:39 Найти цитируемый пост)
К сожалению не знаю что такое POD. 

это встроенные типы данных. а не определённые пользователем. например int, long, double, long*, ...
Цитата(C/L @  1.4.2009,  10:39 Найти цитируемый пост)
но имеется конструктор

значит не подходит. т.к. конструктор занимает дополнительное место и memset "фурычить" не будет smile


--------------------
PM MAIL   Вверх
C/L
Дата 1.4.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



Цитата(azesmcar @ 1.4.2009,  10:36)
Цитата

Вот и я думаю, может без копирования можно как то обойтись. Мне нужно заполнить буфер вершин, переданный устройством по указателю void*. Может можно построить вектор прямо в буфере? При этом при необходимости передать контейнеру указатель на CALLBACK функцию, изменяющую размер буфера. Для этого наверно придется свой контейнер писать... smile 

Код

std::copy(vec.begin(), vec.end(), reinterpret_cast<VERTEX*>(buf) );

а вот так не пойдет?

вот vector на самом деле принимает 2 параметра, первый - тип элементов. А второй зачем?
Код

template<class _Ty, class _Ax> class vector : public _Vector_val<_Ty, _Ax>

PM MAIL WWW ICQ   Вверх
azesmcar
Дата 1.4.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



C/L второй алокатор, если хочешь написать свое реаспределение памяти
PM   Вверх
C/L
Дата 1.4.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



Цитата(zim22 @  1.4.2009,  13:00 Найти цитируемый пост)
Цитата(C/L @  1.4.2009,  10:39 )но имеется конструктор

значит не подходит. т.к. конструктор занимает дополнительное место и memset "фурычить" не будет 

правда smile ? А я не знал. Он же не виртуальный!

Добавлено через 2 минуты и 11 секунд
Цитата(azesmcar @  1.4.2009,  13:03 Найти цитируемый пост)
C/L второй алокатор, если хочешь написать свое реаспределение памяти

А с его помощью можно построить вектор где угодно? Пробывал искать по этой теме, пока ничего не нашел.
PM MAIL WWW ICQ   Вверх
bsa
Дата 1.4.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(zim22 @ 1.4.2009,  11:00)
конструктор занимает дополнительное место и memset "фурычить" не будет smile

Лучше почитать описание POD - там нет упоминаний об обычном конструкторе (только конструктор копирования). Кстати, рекомендую почитать что-нибудь про классы, так как на лицо непонимание внутренней организации объектов.
PM   Вверх
azesmcar
Дата 1.4.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

значит не подходит. т.к. конструктор занимает дополнительное место и memset "фурычить" не будет smile 


чего чего?? сколько места занимает конструктор в памяти?

Добавлено @ 11:16
C/L если в классе нет динамически инициализируемых обьектов, или обьекта, который динамически инициализирует переменные - спокойно можно использовать..


Это сообщение отредактировал(а) azesmcar - 1.4.2009, 11:17
PM   Вверх
bsa
Дата 1.4.2009, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(C/L @ 1.4.2009,  11:05)
Цитата(azesmcar @  1.4.2009,  13:03 Найти цитируемый пост)
C/L второй алокатор, если хочешь написать свое реаспределение памяти

А с его помощью можно построить вектор где угодно? Пробывал искать по этой теме, пока ничего не нашел.

Можно "где-угодно", но не "из-чего угодно". Т.е. аллокатор будет использоваться вместо оператора new. Думаю, тебе не это нужно.
Тебе написали уже все возможные варианты. Ну есть еще вариант без копирования - возвращать константный указатель на первый элемент вектора. Но для этого придется менять функцию, так как в нынешнем виде она подразумевает только копирование.
PM   Вверх
azesmcar
Дата 1.4.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



можно например написать алокатор который будет напрямую создавать твои обьекты в твоем void* буфере с помощью placement new. Но я не уверен что тебе это нужно..
PM   Вверх
bsa
Дата 1.4.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(azesmcar @ 1.4.2009,  11:27)
можно например написать алокатор который будет напрямую создавать твои обьекты в твоем void* буфере с помощью placement new. Но я не уверен что тебе это нужно..

так я о том же  smile 
PM   Вверх
azesmcar
Дата 1.4.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



bsa smile 
я немного детализировал smile 
PM   Вверх
zim22
Дата 1.4.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



bsaazesmcar
по почкам просьба больно не бить, понял свою тупость про POD типы  smile 


--------------------
PM MAIL   Вверх
C/L
Дата 1.4.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



Цитата(azesmcar @  1.4.2009,  13:27 Найти цитируемый пост)
можно например написать алокатор который будет напрямую создавать твои обьекты в твоем void* буфере с помощью placement new. Но я не уверен что тебе это нужно..

А что в этом особенного? Аллокаторы я еще не писал  smile 

Цитата(bsa @  1.4.2009,  13:20 Найти цитируемый пост)
Ну есть еще вариант без копирования - возвращать константный указатель на первый элемент вектора. Но для этого придется менять функцию, так как в нынешнем виде она подразумевает только копирование.

Об этом я еще не думал, надо попробывать.

Всем спасибо, тему можно считать закрытой.

Это сообщение отредактировал(а) C/L - 1.4.2009, 12:55
PM MAIL WWW ICQ   Вверх
bsa
Дата 1.4.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(C/L @ 1.4.2009,  11:52)
Цитата(bsa @  1.4.2009,  13:20 Найти цитируемый пост)
Ну есть еще вариант без копирования - возвращать константный указатель на первый элемент вектора. Но для этого придется менять функцию, так как в нынешнем виде она подразумевает только копирование.

Об этом я еще не думал, надо попробывать.

Всем спасибо, тему можно считать закрытой.

Только имей в виду, что этот указатель будет жить до тех пор, пока вектор жив и к нему не применяются методы, изменяющие размер в сторону увеличения (insert, push_back, resize, reserve, например, но есть исключения - читать документацию, в части об инвалидации итераторов).
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1076 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.