Плохо ли использовать C ++ только для контейнеров STL? - PullRequest
4 голосов
/ 29 января 2010

Сначала немного фона ...

В дальнейшем я использую C, C ++ и Java для кодирования (общих) алгоритмов, а не графические и необычные программы с интерфейсами, а простые алгоритмы командной строки и библиотеки.

Я начал изучать программирование на Java. Я неплохо освоил Java и научился много использовать контейнеры Java, поскольку они, как правило, уменьшают сложность бухгалтерского учета и гарантируют высокую производительность. Я периодически использовал C ++, но я определенно не был так хорош с ним, как с Java, и это было громоздко. Я не знал C ++ достаточно, чтобы работать в нем без необходимости искать каждую отдельную функцию, и поэтому я быстро вернулся к тому, чтобы как можно больше придерживаться Java.

Затем я внезапно перешел к взлому и взлому на языке ассемблера, потому что чувствовал, что слишком много внимания уделяю языку слишком высокого уровня, и мне нужно больше опыта, как процессор взаимодействует с памятью и что на самом деле происходит. с 1 и 0. Я должен признать, что это был один из самых образовательных и забавных событий, которые я когда-либо имел с компьютерами.

По очевидным причинам, я не мог использовать ассемблер для ежедневного кодирования, он был в основном зарезервирован для развлечения. Узнав больше о компьютере благодаря этому опыту, я понял, что C ++ намного ближе к «уровням 1 и 0», чем Java, но я все же чувствовал, что он невероятно тупой, как швейцарский армейский нож со слишком большим количеством вещиц, чтобы сделать любую задачу с элегантностью. Я решил попробовать простую ванильную C и быстро влюбился. Это была счастливая середина между простотой и достаточным количеством «микроманагента», чтобы не абстрагироваться от того, что на самом деле происходит. Тем не менее, я упустил одну вещь о Java: контейнеры. В частности, простой контейнер (такой как вектор stl), который динамически расширяется в размере, невероятно полезен, но довольно сложно каждый раз внедрять в C. Следовательно, мой код в настоящее время выглядит почти полностью как C с контейнерами из C ++, единственной функцией, которую я использую из C ++.

Я хотел бы знать, нормально ли на практике использовать только одну функцию C ++ и игнорировать остальные в пользу кода типа C?

Ответы [ 4 ]

14 голосов
/ 29 января 2010

Короткий ответ: «На самом деле это не самый эффективный способ использования C ++».

При правильном использовании система строгого типа, способность передавать по ссылке и такие идиомы, как RAII, делают программы на C ++ более вероятными, корректными, читаемыми и поддерживаемыми.

Никто не может помешать вам использовать язык так, как вы хотите. Но вы можете ограничивать себя, не изучая и не используя реальные возможности C ++.

Если вы пишете код, который другие люди должны будут читать и поддерживать, они, вероятно, оценят использование «реального C ++» вместо «C с классами» (по словам предыдущего комментатора).

6 голосов
/ 29 января 2010

Кажется, хорошо для меня. Это единственная часть C ++, которую я действительно использую.

4 голосов
/ 29 января 2010

Вы должны использовать C ++ любым удобным для вас способом.

4 голосов
/ 29 января 2010

Прямо сейчас я пишу номер дробилки. Там нет полиморфизма, нет делегирования управления, нет взаимодействия. <iostream> было узким местом, поэтому я переписал ввод / вывод в C.

Функции в основном находятся внутри одного класса, который представляет рабочий поток. Так что это не столько ОО, сколько наличие локальных переменных потока.

Как и vector, я использую <algorithms> довольно сильно. Но сверхпрочные структуры данных написаны на простом C. Главным образом круглые односвязные списки, которые даже не могут легко иметь различные begin() и end(), означая, что не только контейнеры, но последовательности (и for-loop) отключены -пределов. И тогда шаблоны помогают препроцессору генерировать основной внутренний цикл.

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

С другой стороны, использование bsearch из stdlib.h в программе на C ++ было бы неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...