> S>Мне кажется, нет смысла про STL рассказывать. Если человек, "владеющий C++", не удосужился ознакомится с STL, то скорее всего он и ваш тренинг мимо ушей пропустит. Ну а про буст, IMHO, было бы полезно рассказать очень поверхностно и обзорно — один-два примера из каждой либы, чтобы люди примерно представляли что там есть. Кому надо — почитают потом документацию, кому не надо — тоже скучать будут меньше, чем если вы зароетесь в тонкости какой-нибудь одной библиотеки. > > Я бы рассказал про итераторы, всё равно большинство людей их до конца, похоже, не осилило.
Для тех, кто осилил указатели и массивы, можно сказать, что это аналог указателей при работе с массивами, но с ограничениями в зависимости от категории.
> Например, почему std::reverse(str.begin(), str.end()) — неверный ответ на вопрос «как развернуть строку».
По-моему, вполне правильный ответ... У вас в вопросе опечатки нет случаем?
> По этому поводу есть две поучительные
я не гоняюсь за рейтингами, но все же интересно "-" то за что? :D Я лишь описал ситуацию, так как ее вижу. Если знаете, что в чем то не прав, почему об этом не сказать ? В Вашем формате это какое то скрытое мщение напоминает
Здравствуйте, Sergey, Вы писали:
>> Я бы рассказал про итераторы, всё равно большинство людей их до конца, похоже, не осилило. S>Для тех, кто осилил указатели и массивы, можно сказать, что это аналог указателей при работе с массивами, но с ограничениями в зависимости от категории.
Дело не в этом, а в идее задания интервалов в виде [first, last), и в специальном итераторе «past-the-end».
Опять же, вот что плохого в функции template <class X> void foo(std::vector<X> const &)?
>> Например, почему std::reverse(str.begin(), str.end()) — неверный ответ на вопрос «как развернуть строку». S>По-моему, вполне правильный ответ... У вас в вопросе опечатки нет случаем?
Сложность std::reverse — O(n). А можно использовать std::reverse_iterator, O(1).
До последнего не верил в пирамиду Лебедева.
Re[7]: Действительно с пониманием итераторов не всё просто..
Здравствуйте, Roman Odaisky, Вы писали:
RO>Например, почему std::reverse(str.begin(), str.end()) — неверный ответ на вопрос «как развернуть строку».
Не очень понятно что за вопрос и почему ответ неправильный
Вот такой ответ верный?
char m[] = "мама";
std::reverse( m, m + 4 );
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Roman Odaisky, Вы писали:
RO>Сложность std::reverse — O(n). А можно использовать std::reverse_iterator, O(1).
А почему именно это называется "развернуть строку"?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Действительно с пониманием итераторов не всё просто..
Здравствуйте, Erop, Вы писали:
RO>>Например, почему std::reverse(str.begin(), str.end()) — неверный ответ на вопрос «как развернуть строку». E>Не очень понятно что за вопрос и почему ответ неправильный E>Вот такой ответ верный?
Здравствуйте, rg_software, Вы писали:
_>Очень интересно мнение форумчан, насколько широко люди, программирующие на С++, используют boost & STL? Речь идет о самом широком срезе -- студенты, программисты, хобби-девелоперы...
_>Иными словами, насколько актуально, например, обучать этому людей? Или уже все, кто пишет на плюсах, эти штуки знают?
_>Особенно интересует STL, т.к. буст, по моему (практически твёрдому убеждению) точно используют недостаточно широко. Спасибо!
STL активно используется, boost не используется, так как его интеграция в проект (> 400Mb исходников) связана с рисками и дополнительным расходом времени. Плюс тестирование на трех платформах, да проверка, что он с компилятором от MainSoft-а дружит.
Всякие advanced С++ трюки с шаблонами и т.п. используются, когда это оправдано и приводит к выигрышу в производительности или расходах памяти.
Здравствуйте, dip_2000, Вы писали:
_>Если говорить о фирме... то тут все как во многих местах — stl используется, но недолюбливается, исключения используются, тк нужно "идти в ногу со временем", но при этом не используется RAII Как это можно совмещать не понятно. Люди при этом уверены, что утечек не будет.
Ну программы-то работают?
Да и вообще как-то ты неуважительно о своих коллегах. Возможно более опытных, чем ты, кстати...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
_>>Если говорить о фирме... то тут все как во многих местах — stl используется, но недолюбливается, исключения используются, тк нужно "идти в ногу со временем", но при этом не используется RAII Как это можно совмещать не понятно. Люди при этом уверены, что утечек не будет.
E>Ну программы-то работают?
Если это единственный критерий, при оценки работы программиста — тогда Вы очень верно поставили минус! Хотя я слышал еще про трудности при сопровождении такого кода, а уж трудности при расширении и повторном использовании с идиомами, отличными от "удобный С" и вспоминать не хочется...
E>Да и вообще как-то ты неуважительно о своих коллегах.
Ну я бы так не сказал, что где то в тех словах было неуважение. Сомнение в качестве работы — да, неуважение... ну да ладно... офтопик это.
E>Возможно более опытных, чем ты, кстати... Такие вещи нужно или развивать, или это как минус без комментариев Реакция была, а причины ее непонятны
Ладно, дальше развивать не интересно(лично мне), тк это явный оффтоп. Но Ваша позиция, мне не совсем понятна(очевидно из-за неопытности ).
Здравствуйте, Erop, Вы писали:
E>Ну программы-то работают?
это кстати вообще не может рассматриваться как критерий оценки качества ПО или квалификации программиста — если программа не работает, говорить просто не о чем, по факту нет программиста и нет программы как таковой.
... << RSDN@Home 1.2.0 alpha rev. 780>>
Re[9]: Действительно с пониманием итераторов не всё просто..
Здравствуйте, Roman Odaisky, Вы писали:
RO>Он-то верный, но не всегда.
Нет, ответ на вопрос в озвученной формулировке ("как развернуть строку") верный.
На выходе предложенного решения будет развернутая строка.
В условии нигде не сказано что надо пройтись неким алгоритмом по строке "задом наперед".
Так что
RO>Но наверняка лучше так: RO>
J>К нам вот приезжал Саттер, целую неделю по 8 часов читал лекции по своим книгам + немножко Майерса — так
Серьезно? А к вам — это куда? И сколько он бабла срубил?
Of course, the code must be complete enough to compile and link.
Здравствуйте, rg_software, Вы писали:
RO>>Я бы рассказал про итераторы, всё равно большинство людей их до конца, похоже, не осилило. Например, почему std::reverse(str.begin(), str.end()) — неверный ответ на вопрос «как развернуть строку». По этому поводу есть две поучительные
. _>Кстати, почему так строку не развернуть? В инете этот вариант часто предлагают.
Так строку не развернуть, но по причинам, не имеющим почти никакого отношения к C++.
Проблема будет при попытке развернуть строку, содержащую многобайтный символ (который при этом вывернется наизнанку и станет невалидным). Или строку Unicode, содержащую суррогатные пары (которые тоже вывернутся наизнанку) или nonspacing диакритику в decomposed форме (которая уйдёт на соседнюю букву).
std::basic_string<T>::[const_]reverse_iterator, естественно, никакого улучшения с точки зрения корректности не даст.
>>> Я бы рассказал про итераторы, всё равно большинство людей их до конца, похоже, не осилило. > S>Для тех, кто осилил указатели и массивы, можно сказать, что это аналог указателей при работе с массивами, но с ограничениями в зависимости от категории. > > Дело не в этом, а в идее задания интервалов в виде [first, last), и в специальном итераторе «past-the-end».
Работа с массивами через указатели осуществляется точно так же.
> Опять же, вот что плохого в функции template <class X> void foo(std::vector<X> const &)? > >>> Например, почему std::reverse(str.begin(), str.end()) — неверный ответ на вопрос «как развернуть строку». > S>По-моему, вполне правильный ответ... У вас в вопросе опечатки нет случаем? > > Сложность std::reverse — O(n). А можно использовать std::reverse_iterator, O(1).
Зато потом на каждом разыменовании лишние операции вылезут.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
J>>К нам вот приезжал Саттер, целую неделю по 8 часов читал лекции по своим книгам + немножко Майерса — так L_L>Серьезно? А к вам — это куда? И сколько он бабла срубил?
Серьезно. На работу к нам приезжал, лекции читал.
И еще много кого приезжало, типа Крейг Ларман, еще джавер приезжал, Брайан Гоец или как его там правильно писать (он порадовал тем, что рассказывая о том, какая java крутая, в середине мрачно вставил: "Единственное, за что я разработчиков java ненавижу, так это за то, что они не взяли из С++ const").
Они же часто по всяким толстым фирмам ездят.
Вон, в соседний банк Александреску с лекциями приезжал — завидую
Здравствуйте, rg_software, Вы писали:
_>Иными словами, насколько актуально, например, обучать этому людей? Или уже все, кто пишет на плюсах, эти штуки знают?
_>Особенно интересует STL, т.к. буст, по моему (практически твёрдому убеждению) точно используют недостаточно широко. Спасибо!
STL по любому знать надо, по крайней мере в объеме — контейнеров (плюс соответствующие итераторы) и строк. Насчет алгоритмов — не уверен, т.е. рассказать желательно, что вот есть такие и показать на примере, но углубляться на обзорной лекции я бы не стал. Мне часто проще написать банальный цикл, чем лепить еще один класс, т.е. это скорее на любителя. Насчет буста, я бы обязательно рассказал об указателях.
На самом деле задачи за которыми стоят контейнеры, строки и интеллектуальные указатели в том или ином виде встречаются во всех проектах, поэтому недостатки и достоинства стандартных реализаций желательно знать. И идти надо не от конкретных особенностей языка, а от задач, которые они призваны решать.
Сам я сейчас STL не использую, так как в проекте используются другие строки и контейнеры, а решать одни и те же задачи двумя разными способами одновременно по моему не очень хорошо.
COF>Сам я сейчас STL не использую, так как в проекте используются другие строки и контейнеры, а решать одни и те же задачи двумя разными способами одновременно по моему не очень хорошо.
Здравствуйте, dip_2000, Вы писали:
_>>>Если говорить о фирме... то тут все как во многих местах — stl используется, но недолюбливается, исключения используются, тк нужно "идти в ногу со временем", но при этом не используется RAII Как это можно совмещать не понятно. Люди при этом уверены, что утечек не будет. E>>Ну программы-то работают? _>Если это единственный критерий, при оценки работы программиста — тогда Вы очень верно поставили минус! Хотя я слышал еще про трудности при сопровождении такого кода, а уж трудности при расширении и повторном использовании с идиомами, отличными от "удобный С" и вспоминать не хочется...
Ну вот выделенная фраза, позволяет мне предположить, что проект старый уже довольно... Так что скорее всего и с поддержкой они как-то справляются. И версии программ, тоже скорее всего непервые, и если они работают, то таки значит и с развитием и модификацией справляются...
E>>Да и вообще как-то ты неуважительно о своих коллегах. _>Ну я бы так не сказал, что где то в тех словах было неуважение. Сомнение в качестве работы — да, неуважение... ну да ладно... офтопик это.
ИМХО вся вторая половина сообщения окрашена негативными эмоциями, а процитированный мной абзац вообще содержит прямые намёки на глупость коллег...
При этом автор поста буст ещё только изучает, стиль кодирования, принятый на фирме, соблюдать не может (это как же надо так уметь программировать, чтобы не смочь обойтись без boost::bind, если он запрещён?, А как это будет потом поддерживаться другими людьми? А как переноситься?)
В общем вот с этим вот всем я и не согласен...
E>>Возможно более опытных, чем ты, кстати... _> Такие вещи нужно или развивать, или это как минус без комментариев Реакция была, а причины ее непонятны
ИМХО это никому не интересно. Вот даже тебе, например, не интересно
А минус -- это всего лишь "я не согласем с мнением, высказанном в твоём/Вашем сообщении либо с формой, в которой это мнение было высказано"
Я не согласем. С чем -- очевидно. С формой и с содержательной частью мнения тоже...
_>Ладно, дальше развивать не интересно(лично мне), тк это явный оффтоп. Но Ваша позиция, мне не совсем понятна(очевидно из-за неопытности ).
Тебе виднее из-за чего. Мне кажется, что у меня очень простая позиция...
Я на всякий случай, напишу для тебя более корректную, по моему мнению версию того абзаца из сообщения
У нас на фирме STL используется, но не на полную катушку. Слишком сложных конструкций всё-таки стараются избегать. Boost я пока что знаю плохо, зотя и пыьаюсь изучать. Правда этому мешает то, что у нас на фирме он запрещён к использованию. Используются, так же, и исключения, хотя известная мне версия RAII не используется. Я пока не понял как при таких условиях можно писать надёжные программы. Ну у более опытных коллег это пока получается. Буду бороться за модернизацию применяемых у нас на фирме средств разработки
Как-то так, примерно...
Кстати, открой тайну, что оборзначает "RAII не используется"? Это значит, что нет умных указателей, или что нет аналога AFX::CFile / std::fstream или что?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Odi$$ey, Вы писали:
E>>Ну программы-то работают?
OE>это кстати вообще не может рассматриваться как критерий оценки качества ПО или квалификации программиста — если программа не работает, говорить просто не о чем, по факту нет программиста и нет программы как таковой.
Я имел в виду "программа, как коммерческий продукт"...
ИМХО, при коммерческом программировании это вообще единственный критерий оценки процесса разработки. ПО должно выполнять возложенные на него задачи, то есть "работать".
В случае коробочного софта, это обычно обозначает: выполнять нужную функциональность, быть поддерживаемым, развиваемым, и, в послдеднее время, ещё и легко переносимым на другие платформы...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>>>Ну программы-то работают?
OE>>это кстати вообще не может рассматриваться как критерий оценки качества ПО или квалификации программиста — если программа не работает, говорить просто не о чем, по факту нет программиста и нет программы как таковой.
E>Я имел в виду "программа, как коммерческий продукт"... E>ИМХО, при коммерческом программировании это вообще единственный критерий оценки процесса разработки. ПО должно выполнять возложенные на него задачи, то есть "работать". E>В случае коробочного софта, это обычно обозначает: выполнять нужную функциональность, быть поддерживаемым, развиваемым, и, в послдеднее время, ещё и легко переносимым на другие платформы...
К сожалению, не единственный это критерий. Есть еще, как минимум, такой критерий оценки процесса разработки, как скорость выпуска продукта.
Причем, если продукт не коробочный, а заказной, то он может быть даже поважнее такого критерия, как качество
SObjectizer: <микро>Агентно-ориентированное программирование на C++.