Эффективно хранить массив до 2048 символов?

0

Получение ввода от другого источника; который заполняет строку длиной до 2048 символов.

Каков наиболее эффективный способ заполнения и сравнения этой строки? - Я хочу также легко добавить к строке.

Вот три моих попытки:

Версия в стиле C

#include <cstdio>
#include <cstring>

int main(void) {
    char foo[2048];
    foo[0]='a', foo[1]='b', foo[2]='c', foo[3]='\0';  // E.g.: taken from u-input
    puts(strcmp(foo, "bar")? "false": "true");
}

Версия в стиле С++ 0

#include <iostream>

int main() {
    std::string foo;
    foo.reserve(2048);
    foo += "abc";  // E.g.: taken from user-input
    std::cout << std::boolalpha << (foo=="bar");
}

С++ - стиль версии 1

#include <iostream>

int main() {
    std::string foo;
    foo += "abc";  // E.g.: taken from user-input
    std::cout << std::boolalpha << (foo=="bar");
}
  • 0
    Вы понимаете, как эти два отличаются?
  • 0
    Они используют разные структуры данных и разные способы потокового вывода. IIRC std::string действительно имеет где-то const char* .
Показать ещё 9 комментариев
Теги:
string
arrays
memory-management

1 ответ

1

Что наиболее эффективно, зависит от того, для чего вы оптимизируете.
Некоторые общие критерии:

  1. Скорость программы
  2. Размер программы
  3. Размер рабочего набора
  4. Размер кода
  5. Время программиста
  6. безопасности

Несомненный король для 1 и 2, в вашем примере, вероятно, также 3, является стилем C.
Для 4 и 5, стиль C++ 1.
Пункт 6, вероятно, с C++ -стилем.

Тем не менее, требуется правильное сочетание подчеркивания этой цели, которое imho поддерживает опцию C++ 0.

  • 0
    Это до дебатов. Хорошо написанный C ++, безусловно, может быть таким же быстрым / маленьким / дружественным к кэшу, как и хорошо написанный C. И быстрые вычисления показывают, что время, затрачиваемое программистом на «оптимизацию» (и последующее поддержание получающейся путаницы), в подавляющем большинстве случаев дороже, чем любое затрачиваемое на компьютере время, за исключением весьма конкретных обстоятельств. В зависимости от применения, (6) вполне может быть главной проблемой.
  • 1
    @ vonbrand: Ну, в данном случае это не так, поскольку код в стиле C даже не использует динамическую память. Он полностью оптимизирован настолько, насколько это возможно, в то время как код C ++ использует std :: string (и динамическое размещение). Я, конечно, согласен с тем, что 5 и 6 должны быть основной проблемой в большинстве случаев. Хотя не слишком много, или мы бы вместо этого использовали язык сценариев.
Показать ещё 2 комментария

Ещё вопросы

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