Напишите на std :: vector или inplace_vector из c без накладных расходов [дублировать]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Напишите на std :: vector или inplace_vector из c без накладных расходов [дублировать]

Сообщение Anonymous »

Я использую функцию из библиотеки C. Он записывает в данные и возвращает размер, который был написан.

Код: Выделить всё

size_t uart_receive(uint8_t *data, size_t max_len);
Я хочу использовать объекты C ++, такие как std :: inplace_vector , но лучший метод, который я нашел,-это изменить размер вектора, прежде чем записать на него

Код: Выделить всё

template
void uart_receive_cpp(std::inplace_vector &rx_data) {
rx_data.resize(N); // adds padding to rx_data (extra writes)
size_t received_size = uart_receive(rx_data.data(), N);
rx_data.resize(received_size);
}
Потому что .resize () взимает складывание, я должен увеличить его, прежде чем подгонять его в размере, что также вызывает дополнительные записи. Что-то вроде: < /p>

Код: Выделить всё

template
void uart_receive_cpp(std::inplace_vector &rx_data) {
size_t received_size = uart_receive(rx_data.data(), N);
rx_data.resize_no_padding(received_size);
}
или есть лучший способ получить данные из uart_receive () в предварительно выделенный массив/вектор в стиле CPP без дополнительных записей? Я все еще хочу использовать функцию .size () , чтобы отразить фактическое количество полученных байтов.


Подробнее здесь: https://stackoverflow.com/questions/795 ... t-overhead
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»