LINUX.ORG.RU

Неинициализирующий vector

 


0

2

Хочу vector<uint8_t>, который не будет инициализировать нулем элементы при создании. Как такое сделать?

Upd. Я уже поднимал этот вопрос, так что вобщем то отбой. vector vs unique_ptr

Так что не надо спорить о vector и unique_ptr и скорости, интересна именно возможность vector без инициализации элементов (POD типов)



Последнее исправление: Uter (всего исправлений: 1)

реализуй свой struct RandomIterator и скармливай его vector'у при создании.

std::vector<uint_8t> vec(RandomIterator(Count), RandomIterator::end());

// Псевдокод

NegatiV
()
std::vector<uint8_t> v(n,1);
anonymous
()
#include <stdint>
#include <vector>
#include <iostream>

int main()
{
    std::vector<uint8_t> vec((uint8_t*) &vec, ((uint8_t*) &vec) + 10);

    for (auto i : vec)
    {
        std::cout << int(i) << " ";
    }
}
ilammy ★★★
()
Ответ на: комментарий от Stil

А ничем не будет. знаю, что можно сделать так, но как то неудобно

struct unintialized_byte
{
    uint8_t value;
    unintialized_byte(){}
};
vector<unintialized_byte> vec(100500);
Мне это нужно как буфер, который сразу заполняется данными из внешнего API, например так
size_t readen=0;
GetData(vec.data(), vec.size(), &readen);
vec.resize(readen);
и таким образом начальная инициализация 100500 значений - пустая трата времени

Uter
() автор топика
Ответ на: комментарий от Uter

:)

и таким образом начальная инициализация 100500 значений - пустая трата времени

а сколько потеря в секундах?

Stil ★★★★★
()
Ответ на: комментарий от devsdc

Ну вроде того, скорее это просто исследование на тему «а можно ли так? а может уже сделали?» потому что разница между 10 микросекундами и 10 миллисекундами роли не играет (внешнее API гораздо медленнее)

Uter
() автор топика
Ответ на: :) от Stil

а сколько потеря в секундах

~1000 раз вроде, правильно не измерял

Uter
() автор топика
Ответ на: комментарий от Uter

readen

facepalm.cpp

Если у вас такие исходники, то лучше никуда их не выкладывайте и никому не показывайте.

DELIRIUM ☆☆☆☆☆
()

А в чем проблема то? Делай специализацию шаблона для ПОД типов и делай внутри специализации все, что хочешь.

AF ★★★
()
Последнее исправление: AF (всего исправлений: 1)

Роба Пайка на ОПа нет.

anonymous
()
Ответ на: комментарий от invy

assign откуда? вот это самое откуда ОП и пытается сделать.

anonymous
()
Ответ на: лолшто от anonymous

Да, спросонья херню сморозил, ты прав.

DELIRIUM ☆☆☆☆☆
()

если именно std::vector<unit8_t> - никак.

можно или: boost::container::vector<int> vi; vi.resize(12, boost::container::default_init);

или кастомный алокатор, у которого construct - пустой

Lotander
()

uint8_t vector[vector_size];

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.