?

Log in

No account? Create an account
Previous Entry Share Next Entry
Что случилось с С++?
белая и пушистая
eternele
На новой работе мне приходится работать с С++, и я не узнаю брата Колю. Когда несколько лет назад я изучала его в универе, делала на нём проекты, он казался мне логичным, простым и элегантным. Практически совершенным языком. А теперь я смотрю в код и вижу фигу. Полная хрень по сравнению с Java или Python. Что за typedef?  Почему вместо двойных пойнтеров теперь 2D векторы? Что за фигня такая - итераторы?! Почему через :: обозначается как принадлежность к namespace, так и функции? Почему иногда функции применяются через стрелку ->, а иногда через точку? Что за "Macro"? Как создавать new instance of structure while looping без комманды new?

У меня ощущение, что я учила какой-то другой язык, и этот новый мне совсем не нравится. Кривые двумерные матрицы, pointers уже не кажутся такой хорошей мыслью по сравнению с динамическими массивами (собственно, никогда не казались), объявление функций зачем-то отделено от их определения. Я уже три недели сражаюсь с С++, и совершенно exhausted. Иногда настолько бесит, что я сдаюсь и делаю что-то быстро в Матлабе. Не думала, что когда-нибудь это скажу, но хочу работать в Java. Или хотя бы Питоне.


  • 1

Welcome to real world😃 Vector с итераторами с конца 90- х в плюсах, с версии 14, да и все тобою перечисленное, тоже не вчера пришло. Просто на базовом курсе програмирования нет смысла  давать развитые возможности , которые нужны , чтобы уровень языка повысить.. Потому, что тогда встанет закономерный вопрос, "нахрена изучать С++ в таком виде,  применительно к работе с массивами и  матрицами, в котором он уже почти Матлаб "😃. Тогда проще на Матлабе и писать😃


Мы вектор видели краем, а матрицы делали через двойной пойнтер. А в интернет все пишут, что надо вложенным вектором. Почему?...

Я не поняла сравнения с Матлабом. С++ и Матлаб на разных концах шкалы по простоте.

Ну как "на разных краях" , ты пробовала писать на Малабе высокопроизводительный код  для распаралеливания задачи  на кластер с использованием Parallel Computing Toolbox   ?
А в добавок  для CUDA чтобы бегало на кластере из  GPU  ? Это кстати для Machine Learning актуальнее некуда, поскольку без GPU  даже не всякую идею опробуешь.. ..   Посмотри доя любопытства примеры  кода  который пишут для компилируемого и кластерного исполнения  -  массу нового откроешь про  простоту Матлаба 😃 Но я вообще  на самом деле пытался сказать про то, что и   раньше и теперь люди всерьез с Матлабом работающие просто пишут на С++ критические  по быстродействию функции  подключали в Матлаб-приложения   через MEX- файлы.  У меня несколько таких тулбоксов , которые использую скажем для image registration, где  до трети  файлов на "плюсах" написано.  Но сейчас синтаксис Матлаба стал настолько шире и богаче а в плюсах появилось столько фич приблежающих стиль написания к Матлабу, что смотришь в файл и не сразу врубаешься -  , это "чистый" Матлаб или  таки С++ предназначенный для компиляции в MEX таким образом перекрученный через typedef и  переопределения операторов и прочие ухищрения что не глядя в заголоаок и не поймешь 😃


И векторы и итераторы как раз для того, чтобы можно было избавиться от явных циклов и адресно-указательной  арифметики и писать  в парадигме Матлаба или Питона в тех случаях, когда прозрачность, быстрота и  простота  кода важнее скорости. В Матлабе напротив, когда нужно "быстро" выполнить" , то отказываются от быстроты написания и отладки и на плюсах пишут с адресной арифметикой (точнее переносят из Матлаба в с++ код критические куски выявленные профайлером)


Стрелка это разыменовывание по указателю. По-старинке надо писать (*p).f, но сейчас модно p->f, это эквивалентно. :: это неймспейсы. Надо про почитать, потому что boost & stl это стандарт.

Впрочем, со всеми итераторами, closures, auto, и т.п. фичами, новый C++ намного компактнее и красивее, чем старый - для тех, кто хорошо знал старый это понятно :)

3 недели - лол.
У меня даже на скалу ушло 2 месяца.
Чтобы на C++ было комфортно, надо пару лет как минимум.

Я на С уже делала законченный проект в течение семестра после семестра изучения С и семестра С++, и думала, что поняла его. Про boost первый раз слышу.

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

Я два семестра изучала, а потом семестр делала проект. Который работал, что-то делал. Правда, он был на С. Не знаю, насколько он сильно отличается от С++.

> :: это неймспейсы

int Graph '<'NodeType, ArcType> :: graphCompare(const Graph
[Error: Irreparable invalid markup ('<nodetype,>') in entry. Owner must fix manually. Raw contents below.]

> :: это неймспейсы

int Graph '<'NodeType, ArcType> :: graphCompare(const Graph<NodeType, ArcType>& graph2) const {...};


Edited at 2018-10-18 11:59 am (UTC)

Извините за множество корректировок комментария, но я пыталась вставить кусок кода, а ЖЖ мне пишет, что ошибка. В общем, я нашла пример, где :: используется в объявлении фукнции, а не в namespace.

:: используются в объявлении мемберов класса тоже. Но класс это своего рода неймспейс, он задаёт scope аналогично неймспейсу.

Ещё, кстати, :: используются при вызове статических мемберов. Обычные вызываются через объект (a.member() или a->member()), а статические вызываются без объекта, поэтому будет classname::member().

О, чёрт, я идиот. Я забыла, что в С деструкторы, которые надо вызывать ручками. Поэтому и нет никаких new. И что функции можно surcharge. Прохожу краш-курс по С++.

На моей работе Вас бы с распростертыми объятиями приняли.

Нехватка людей, знаюших Питон, Java, не боящихся Матлаба, а уж про C++ вообще молчу.

  • 1