вектор <неподписанный символ> по сравнению со строкой для двоичных данных

Используйте строковое форматирование, найденное в модуле времени. Подробное объяснение форматов использовало

>>> import time
>>> time.strptime("51 08 1","%U %y %w")
(2008, 12, 22, 0, 0, 0, 0, 357, -1)

, возвращенная дата выключена на одну неделю согласно календарю на моем компьютере, возможно, это вызвано тем, что недели индексируются от 0?

24
задан kalaxy 14 October 2009 в 18:14
поделиться

7 ответов

Вы должны предпочесть std :: vector , а не std :: string . В общих случаях оба решения могут быть почти эквивалентными, но std :: string разработаны специально для строк и манипулирования строками, и это не ваше предполагаемое использование.

27
ответ дан 28 November 2019 в 23:34
поделиться

Оба правильные и одинаково эффективные. Использование одного из них вместо простого массива предназначено только для упрощения управления памятью и передачи их в качестве аргумента.

Я использую вектор, потому что цель более ясна, чем со строкой.

Изменить: Стандарт C ++ 03 не гарантирует непрерывность памяти std :: basic_string . Однако с практической точки зрения не существует коммерческих несмежных реализаций. C ++ 0x установлен на стандартизировать этот факт .

13
ответ дан 28 November 2019 в 23:34
поделиться

Это комментарий к ответу dribeas. Я пишу это как ответ, чтобы иметь возможность отформатировать код.

Это функция сравнения char_traits, и поведение вполне нормальное:

static bool
lt(const char_type& __c1, const char_type& __c2)
{ return __c1 < __c2; }

template<typename _CharT>
int
char_traits<_CharT>::
compare(const char_type* __s1, const char_type* __s2, std::size_t __n)
{
  for (std::size_t __i = 0; __i < __n; ++__i)
if (lt(__s1[__i], __s2[__i]))
  return -1;
else if (lt(__s2[__i], __s1[__i]))
  return 1;
  return 0;
}
1
ответ дан 28 November 2019 в 23:34
поделиться

Один эффективнее, чем другое?

Это неправильный вопрос.

Есть ли более «правильное» использование?

Это правильный вопрос.
Это зависит. Как используются данные? Если вы собираетесь использовать данные в строке, такой как fashon, вам следует выбрать std :: string, поскольку использование std :: vector может запутать последующих сопровождающих. Если, с другой стороны, большая часть манипуляций с данными выглядит как простая математика или вектор, то более подходящим является std :: vector.

4
ответ дан 28 November 2019 в 23:34
поделиться

Если вы просто хотите сохранить свои двоичные данные, вы можете использовать битовый набор , который оптимизирует распределение пространства. В противном случае выберите вектор , так как он более подходит для вашего использования.

-1
ответ дан 28 November 2019 в 23:34
поделиться

Сравните эти 2 и выберите для себя более конкретный вариант. Оба очень надежны, работают с алгоритмами STL ... Выбирайте сами, что более эффективно для вашей задачи

-1
ответ дан 28 November 2019 в 23:34
поделиться

Лично я предпочитаю std :: string, потому что string :: data () гораздо более интуитивно понятен для меня, когда я хочу, чтобы мой двоичный буфер вернулся в C-совместимую форму. Я знаю, что векторные элементы гарантированно хранятся непрерывно, упражнение в коде кажется немного тревожным.

Это стилевое решение, которое индивидуальный разработчик или команда должны принять для себя.

-2
ответ дан 28 November 2019 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: