Размер байта, используемый std :: vector

0

Я связываю std::vector с программой на C, которая должна знать размер в байтах.

Могу ли я сделать это без выражения sizeof(vec[0])?

void *dest = get_dest();
std::vector<T> vec;
memcpy(dest, vec.data(), vec.size() * sizeof(vec[0]));

Пожалуйста, не предлагайте альтернативы типа C++ для memcpy.

  • 6
    Вы могли бы сделать sizeof(T) я думаю?
  • 1
    возможный дубликат stackoverflow.com/questions/8778091/sizeof-stdvector-c
Показать ещё 4 комментария
Теги:

1 ответ

2
Лучший ответ
template<class T, class A>
std::size_t bytes_in_vector( std::vector<T,A>const& v ){
  return v.size()*sizeof(T);
}
template<class A>
std::size_t bytes_in_vector( std::vector<bool,A> const& )=delete;

однако, с sizeof(vec[0]) мало что происходит, если T не является bool. Если T является bool вам не разрешается использовать memcpy.

  • 0
    Очень круто! Я не знал, что вы можете извлечь аргументы шаблона, как это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню