Напишите на 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 без дополнительных записей?


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

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