2010-10-18 5 views
1

Я собираюсь пройти несколько курсов по распознаванию образов. Поскольку у меня нет каких-либо предварительных знаний ни на C, ни на С ++, мои профессора сказали мне узнать немного одного из них перед курсом и узнать больше, когда делаете курс.C или C++ для распознавания образов/обработки изображений?

Какой я должен выбрать?

Предварительные знания в области программирования у меня ограничены главным образом C#, но также некоторыми PHP, SQL и Prolog.

+3

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

+3

Почему вы не ответили на этот вопрос? –

+1

@Paul: верно и обратное, и я утверждаю, что учебный маршрут C++ => C лучше (проще, эффективнее), чем наоборот. –

ответ

4

Страуструп (изобретатель C++) утверждает, что C++ is easier to learn than C:

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

Имея это в виду, перейдите на C++.

1

Стандартная библиотека, которую вы, скорее всего, используете, - opencv.

C# поможет вам справиться с C/C++. Вероятно, вы сможете увидеть примеры кода opencv и понять их.

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

Звучит весело! Удачи.

+1

Обратите внимание, что OpenCV имеет как C, так и C++ API, но кажется, что C API более зрелый и более стабильный. (Конечно, вы все равно можете вызвать C API из C++, но это скорее поражает цель обучения C++). –

+0

Никто не владеет C++! Вы просто становитесь немного лучше каждый раз. –

3

C и C++ в корне отличаются тем, как они подходят к программированию. Если у вас есть опыт работы с C#, C++ будет выбором, поскольку он также ориентирован на объекты. Кроме того, несмотря на то, что они разные, знание C++ позволит вам читать (и в основном понимать) код C. Кроме того, ознакомьтесь с this question за информацией о различиях между этими языками.

3

Я бы порекомендовал изучать C++, поскольку это, вероятно, будет проще всего, если вы знаете о классах и т. Д. С C#. Также вы можете писать свободные функции в C++, но сложнее писать классы в C.

5

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

Если это ваш первый низкоуровневый язык, изучите C. Простой, надежный и проверенный язык, и он позволяет писать быстрый код. Он имеет десятилетнюю историю переносимости. Гораздо проще интегрировать код C с кодом, написанным на других языках. С C++ слишком сложно сделать что-то неправильно. C++ требует гораздо большей степени владения языком и гораздо большего внимания программиста, чтобы все было в порядке. Хотя можно писать быстрый код на C++, это скорее искусство, чем то же самое в C.

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

См., Например, серьезную критику C++ от Линуса Торвальдса: C++ is a horrible language и C++ productivity. В основном, это сводится к тому, что C++ слишком усложняется даже для профессиональных программистов, а код C++ неоднозначен с зависящим от контекста поведением (это можно рассматривать как функцию языка более высокого уровня, но затруднять рассуждение о производительности).

Одна из основных библиотек с открытым исходным кодом для компьютерного зрения, OpenCV, доступна как для C, так и для C++, но также доступна для Python, что намного проще в том, чтобы быстро выполнить все действия (а также изучить как первый язык). BTW, я предполагаю, что если вам удастся выгрузить большую часть работы в библиотеку, которая сама написана на C/C++, производительность Python не будет огромной (но, как правило, Python в 10 раз медленнее C).

+1

Хотя некоторые из пунктов, сделанных Линусом, действительно действительны, большинство его диатриб на C++ - это ужасные начинания разжигания огня (в конце концов, Linus (co-) * придумал * пламенные войны). Не является хорошим источником объективной критики. –

+0

Ну, возможно, есть лучшие источники, не стесняйтесь предлагать. Хотя я в основном соглашаюсь с Линусом, я не собираюсь (перезапускать) пламенную войну. Главное, что лучше начинать с чистого C сначала, а не с того, что C++ никогда не должен использоваться кем-либо. Это не хороший язык для первого студенческого проекта (но может быть подходящим в другом месте). – sastanin

+2

Хотя люди, которые приходят из c, обычно имеют плохие привычки, обычно с типом безопасности и не используя [RAII] (http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization). –

Смежные вопросы