На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
Страницы: (27) 1 2 [3] 4 5 ...  26 27  ( Перейти к последнему сообщению )  
> Актуальный учебник по С++ , Какой он должен быть?
    B.V., аргументируй. На конкретных примерах. И, скажем, если в букварях по C# будут продвигать использование List<T> и фич из System.Linq - это есть зло? Так что-ли?
      Цитата B.V. @
      там без глубокого понимая ООП никак.

      ООП - понятие растяжимое :). Скажем, для понимания буста глубокого понимания ООП не нужно(в том смысле в котором я понимаю слова "понимание ООП") :). Сорри за масло маслянное...
        Да и понимания шаблонов - тоже не особо. Вполне достаточно: "если хотите так, то делайте сяк".
          Цитата B.V. @
          Взять тот же for each, к примеру. Вот что, кроме религии, мешало тому же Страуструпу предусмотреть конструкцию for each в языке C++? Нет, надо было городить шаблонную затычку...


          Кстати, можно небольшой технический вопрос? Каким образом реализована и работает конструкция подобная for each в C++?
            Цитата --Ins-- @
            Каким образом реализована и работает конструкция подобная for each в C++?

            Смотря какую ты имеешь ввиду.

            Есть STL for_each - это просто ф-ция, которая принимает на вход два итератора(первый и последний) и функтор и итерирует по ним применяя к каждому из элементов функтор.

            Есть BOOST_FOREACH - это макрос, который чудесным образом выводит тип элеменов контейнера и на каждой итерации засовывает в локальную переменную результат разыменования итератора.
              archimed7592, спасибо, примерно понятно. Кстати, у for each более глубокий смысл, чем просто синтаксический сахар. Тут ключевой момент проявляется тогда, когда порядок обхода списка не регламентирован. Он может быть выполнен с начала в конец, с конца в начало, в произвольном порядке или параллельно - эффект будет одинаковым. А вот последнее - это уже интересно. Операция может быть распараллелена и язык вполне это позволяет. Следующий шаг - за компилятором. Это конечно не функциональное программирование, где нет побочных эффектов, и распараллелить можно почти все что угодно, но уже кое что.
                --Ins--, в случае std::for_each - это тоже верно, ибо порядок обхода явным образом не специфицирован.
                  Цитата --Ins-- @
                  Следующий шаг - за компилятором.

                  В нашем случае шаг за библиотекой :). К примеру, как недавно упоминал Флекс в топике про новый стандарт, в стандартной билиотеке GCC последних версий некоторые алгоритмы реализовали параллельным образом.
                    Цитата B.V. @
                    Да что вы опять пытаетесь навязать новичкам шаблоны... :wacko: шаблоны (STL) -- это затычки в C++, которые просто заменяют родную функциональность более продуманных и дружелюбных языков, как, например, Дельфи.


                    Про STL и шаблоны не сказал бы что это библиотека затычек - это часть стандартной библиотеки языка, как она может быть затычкой тогда? :blink: Просто авторы многочисленных учебников "не умеют это готовить", :D , и поэтому у программиста создаеться впечатление, что STL и прочее это затычки, как будто какие-то "беплатные приложения" плагины к языку. :D
                    Ну как еще довольно "зеленый" программсит, находящийся еще в стадии набирания опыта, скажу, что по "чистому" C++ просто нет нормальных книг. Нету и все в основном, те с которых я начинал, там я даже не знаю как сказать, конструкции + ООП. То есть песня у всех одна, основные конструкции языка, ООП и все как будто больше ничего не существует, STL, другие вопросы по библиотекам и прочее это все как будто не относиться вообще, где-то на заднем плане остаеться.
                    Единственно мне понравилась книга по С++ это почему-то автор Липманн "С++ для начинающих", может кто-то не согласиться, но мне именно методика книги понравилась, там сразу наряду с конструкциями языка и ООП сразу будущий специалист вводиться в курс дела да и примеры построены таким образом, что сразу на равне с самим языком и парадигмой ООП будущий специалист получает знания и навыки работы с STL контейнерами с алгоритмами и т. д.. Вот я считаю нормальный учебник по С++ должен быть именно таким, а не как всегда сначала предлагаеться строять самому новичку какие-то алгоритмы, стеки и т. д., а потом новичек узнает, что все чем он занимался это была обезьянья работа, так как это все уже давно есть в стандартной библиотеке, в том числе и в STL.

                    Конечно я бы не раскритиковал так в пух и прах многие учебники по С++, кроме Липманна разумееться, который мой любимый учебник по С++ :) , если бы не взялся в недавнее время за Java, что не учебник по Java то сразу акцент на библиотеку классов, на готовые классы, методы и интерфейсы + ООП, в общем сразу "по честному" и без "изобретения велосипедов". Нет я не хочу холиварить, что лучше Java или C++, С++ сам по себе не сложный и изучабельный как и любой язык, возможно даже еще сложнее есть вещи, его С++ просто "не умеют готовить", к сожалению, поэтому у него и создаеться такой иммидж очень сложного и непостежимого языка.

                    А что будет после того и какие "шатания" в учебниках и других методических матеориалах начнуться когда выйдет новый стандарт языка, даже представить страшно. :ph34r:
                    Сообщение отредактировано: MumiyTroll2008 -
                      Цитата Flex Ferrum @
                      аргументируй. На конкретных примерах.


                      Что именно аргументировать?

                      Цитата Flex Ferrum @
                      И, скажем, если в букварях по C# будут продвигать использование List<T> и фич из System.Linq - это есть зло? Так что-ли?


                      Нет, я полностью поддерживаю изучение шаблонов вместе с основами языка, я просто говорю о том, что не стоит так зацикливаться на шаблонах, это не язык, это всего-лишь дополнительные классы-затычки на нем.
                        Тогда бы я наверно говорил о том, что вы хотите сказать, что сначала изучать синтаксис языка, а потом только переходить к библиотечным средствам?
                        Странный ход мысли, получаеться, что например язык Java полностью состоит из "затычек", так как хоть малые операции невозможно сделать без использования средств библиотеки языка, и статических методов классов библиотеки. Хотябы для примера рассмотрим случай, определить длину массиива уже использутеься уже поле length.

                        ExpandedWrap disabled
                          int[] arr = new int[100];
                          for(int i = 0; i < arr.length; i++)
                          .......;


                        Те же самые фишки-аналоги похожие на STL.

                        И почему программист на С++ должен объявлять константу длины массива, ошибаться или что-то там вычислять.
                        Или теже статические методы класса Arrays из Java для массивов по сортировке, копированию, сравнению, поиску Java программист это уже знает сразу и может уже юзить, а С++ программисту сначала вдалбливаеться, как это все делаеться вручную, а потом только он узнает, что есть такая штука как STL, вернее теперь уже стандартная библиотека языка С++ где все это есть.

                        Несправедливо как-то получаеться. :no:
                        Сообщение отредактировано: MumiyTroll2008 -
                          Цитата MumiyTroll2008 @
                          а потом новичек узнает, что все чем он занимался это была обезьянья работа, так как это все уже давно есть в стандартной библиотеке, в том числе и в STL.


                          Ну, обучение всегда подразумевает обезьянью работу. Без этого никак и это правильно, я так считаю. Все сначала учат таблицу умножения, прежде чем узнают о существовании калькуляторов. В этом случае меньше белых пятен останется.
                            Цитата B.V. @
                            Что именно аргументировать?

                            Почему именно затычки? Что в таком случае не является затычками? При том условии, что в том же C# все контейнеры (в том числе и языковые массивы) - это сущности .NET Framework, в прочем как и исключения, reflection и прочее... Тоже затычки, по твоей логике?
                              Цитата MumiyTroll2008 @
                              И почему программист на С++ должен объявлять константу длины массива, ошибаться или что-то там вычислять.

                              Ну да. Куда проще:
                              ExpandedWrap disabled
                                int main(int argc, char* argv[])
                                {
                                    using namespace std;
                                    using namespace boost::lambda;
                                 
                                    boost::array<int, 5> arr = {1, 2, 3, 4, 5};
                                 
                                    for (int n = 0; n < arr.size(); ++ n)
                                        std::cout << arr[n] << std::endl;
                                 
                                    BOOST_FOREACH(int a, arr)
                                    {
                                        std::cout << a << std::endl;
                                    }
                                 
                                    std::for_each(arr.begin(), arr.end(), std::cout << _1 << "\n");
                                 
                                    return 0;
                                }

                              ;)

                              Просто три варианта прохода по статически инициализируемому массиву.
                                Цитата Flex Ferrum @
                                Почему именно затычки?


                                Как я тебе должен это аргументировать? Я привел пример -- for each.
                                Сравни вот этот вот ужас
                                Цитата Flex Ferrum @
                                std::for_each(arr.begin(), arr.end(), std::cout << _1 << "\n");

                                и
                                ExpandedWrap disabled
                                  for VarName in SomeArray do
                                  begin
                                    //
                                  end;
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (27) 1 2 [3] 4 5 ...  26 27


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0585 ]   [ 15 queries used ]   [ Generated: 19.07.25, 03:32 GMT ]