|
Вопрос # 5 506/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Возник вопрос по строкам. В с++ два типа строк - массив char и класс string. Какой и для каких целей лучше использовать?
 |
Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 16 июля 2011, 18:01
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Gooddy
Здравствуйте, Евгений Eklmn!
Очень просто. Массив char не следует использовать, если конечно нет веских оснований.
А класс string очень полезный и функциональный.
Возможно конечно, что массив char выигрывает в скорости, но это далеко не факт.
 |
Ответ отправил: Gooddy (статус: 3-ий класс)
Время отправки: 16 июля 2011, 19:35
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, Евгений Eklmn!
Если честно сказать, то в С++ нет строк. Массив сhar - это массив байтов, просто его интерпретируют как строку (так принято).
Класс string - такого вообще нет. Есть std::string из стандартной библиотеки классов. Хотя библиотека std и является частью стандарта, но она не является неприемлемой частью с++. То есть, может быть компилятор под какую то экзотическую платформу, где не будет этого класса.
В библиотеках, которые идут с Visual Studio есть класс CString, который подобен std::string по функционалу.
Мой совет - изучать и использовать std::string, как класс, который решает большое кол-во задач, в стандартной библиотеке есть много функций и алгоритмов для решения типичных задач (сортировка, поиск). Параллельно разбираться с массивом символов и операциями над ними - от них никуда не деться. Как минимум нужно уметь правильно преобразовать в std::string.
При правильной работе массив символов (char[]) будут самими эффективными, но кол-во кода для этого может быть очень большим. Малейший шаг в сторону и программа падает с треском. А класс std::string в большинстве случаев дает очень хороший и быстрый код без существенного углубления в детали.
В целом, учить нужно оба способа представления строк, даже написать пару-тройку своих велосипедов, сравнить их по качеству и скорости с стандартными, может у Вас что то и получится интересное, но опыта наберетесь.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 18 июля 2011, 21:19
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 18 июля 2011, 19:27; участников в обсуждении: 3.
|
Евгений Eklmn (статус: Посетитель), 17 июля 2011, 18:53 [#1]:
А что, например, может считаться веским основанием?
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
|
|
bugmenot (статус: 3-ий класс), 18 июля 2011, 10:02 [#2]:
char[N] это тип из сей, не из плюсовЦитата (Gooddy):
массив char выигрывает в скорости, но это далеко не факт Чепуха, большинство операций над asciiz медленнее. А еще присутствует узнаваемый расплывчатый стиль; не бери пример с этого чувака ;-)
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Егор (статус: 10-ый класс), 18 июля 2011, 18:13 [#3]:
Цитата (bugmenot):
Чепуха, большинство операций над asciiz медленнее
йинтересно. это какие же?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Егор (статус: 10-ый класс), 18 июля 2011, 18:21 [#4]:
Цитата (bugmenot):
А еще присутствует узнаваемый расплывчатый стиль
а это про что?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
bugmenot (статус: 3-ий класс), 18 июля 2011, 19:27 [#5]:
Цитата (Егор):
интересно. это какие же?
Все, которые зависят от текущей длины asciiz и вычисляют её.
Цитата (Егор):
а это про что?
Про уклончивые ответы. Имён не называю.
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|