Здравствуйте, IROV.., Вы писали:
IRO>есть
IRO>void * blob = new char [ size ];
IRO>могули я сконфигурировать так std::vector что бы IRO>_Myfirst = blob; IRO>_Mylast = blob + size; IRO>_Myend = blob + size;
IRO>как мне кажется это не реально, из за политики алокаторов
Да, нереально.
А void * blob нельзя переделать в vector<char> blob(size);?
Любите книгу — источник знаний (с) М.Горький
Re[2]: можно ли std::vector создать как wrapper над имеющимс
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, IROV.., Вы писали:
IRO>>есть
IRO>>void * blob = new char [ size ];
IRO>>могули я сконфигурировать так std::vector что бы IRO>>_Myfirst = blob; IRO>>_Mylast = blob + size; IRO>>_Myend = blob + size;
IRO>>как мне кажется это не реально, из за политики алокаторов B>Да, нереально. B>А void * blob нельзя переделать в vector<char> blob(size);?
данные приходят по сети
хотелось бы их обернуть в std::vector а не хранить
void * m_buffer;
size_t m_size;
я не волшебник, я только учусь!
Re[3]: можно ли std::vector создать как wrapper над имеющимс
Ну почему, можно. Сделать хитрый аллокатор выполняюющий следующие условия:
1. в конструктор аллокатора передаются сишный буфер.
2. при первом выделении памяти аллокатор смотрит — равен ли запрашиваемый размер — размеру буфера. Если не равен — выделяем память обычными средствами, после чего по любому обнуляем размер буфера (чтобы любое последующее выделение памяти происходило штатными средствами).
3. vector<char, smart_allocator> vec(buffer, buffer + size, smart_allocator(buffer, size))
Нужно разобрать угил.
Re: можно ли std::vector создать как wrapper над имеющимся b
то лучше использовать std::vector с самого начала. Если же кто-то чрезмерно услужливый сам выделяет память и уже дает тебе void *, то сделай из него пару итераторов и будет тебе счастье:
Здравствуйте, NikeByNike, Вы писали:
NBN>Здравствуйте, IROV.., Вы писали:
NBN>Ну почему, можно. Сделать хитрый аллокатор выполняюющий следующие условия: NBN>1. в конструктор аллокатора передаются сишный буфер. NBN>2. при первом выделении памяти аллокатор смотрит — равен ли запрашиваемый размер — размеру буфера. Если не равен — выделяем память обычными средствами, после чего по любому обнуляем размер буфера (чтобы любое последующее выделение памяти происходило штатными средствами). NBN>3. vector<char, smart_allocator> vec(buffer, buffer + size, smart_allocator(buffer, size))
идея понравилась!
я не волшебник, я только учусь!
Re: можно ли std::vector создать как wrapper над имеющимся b
Здравствуйте, Roman Odaisky, Вы писали:
RO>Если же тебе нужно использовать, например, resize, то нужно с самого начала использовать std::vector.
Топикстартеру — именно так всегда и делаю когда речь заходит о данных, получаемых откуда-то.