Pull to refresh

Comments 45

QHash в Qt до сих пор ругается на double-ключ? :-)
Отправилось случайно, сорри. Ответ — qhash.h:880: ошибка: call of overloaded 'qHash(const double&)' is ambiguous
Что то мне трудновато представить ситуацию, когда бы могли понадобится дабл или флоат ключи. Думаю и в STL без специального компаратора с допуском при сравнение, работать это будет крайне ненадежно.
Ха! Тогда почему для QMap есть?
Потому, что для мэпа, ключу достаточно, чтоб его можно было сравнивать и копировать, хотя то, что он не будет ругаться на double еще не значит, что его надо туда пихать. Для hash_map/QHash/etc нужна еще и функция хеширования, которую, понятное дело, не написали. Мало того, что очень специфическая вещь и мало кому (если вообще) понадобится, еще и не существует «логичной» реализации, которая бы подошла всем, или хотя бы большей части пользователей. Даже если оставить в стороне сомнительную идею делать ключами числа с плавающей точкой и все проблемы с этим связанные, то как высчитывать для хеш для вещественного числа в общем случае?
Я думаю, что начинающему программисту на C++ надо сначала освоить STL. Это в любом случае надо и полезно. Ну а переход на контейнеры QT делается тогда совсем легко.
Если человек начинает программирование с Qt, то тут без вариантов — Qt-контейнеры. Студия для начинающего будет, как мне кажется, сложноватой, а больше альтернатив и нет. Builder уже неактуален, DOS-варианты языка С++ даже рассматривать как-то неловко. Они со всех сторон неудобные, хотя еще преподаются.

Вообще, Qt С++ замечательно занял нишу С++ Builder'а, и он для начинающего сишника будет хорошим выбором.
Совершенно не согласен.
Мухи должны быть отдельно, а котлеты отдельно. Контейнеры STL нужно знать в первую очередь. Ведь может понадобиться программировать и без применения Qt.
Это даже представить себе трудно: начинаем изучать C++ c Qt, но при этом задействуем контейнеры STL. А контейнеры Qt что — побоку? Но их же нельзя игнорировать, они там всюду. И они ничем не хуже. Да и семантика у них почти такая же, начинающему эта разница неважна.

Да и не очень правильная практика — изучать С++ с шаблонов. Пусть новички хотя бы хэллоуворды попишут, с синтаксисом свыкнутся, общеупотребительные шаблоны кода изучат. Шутка ли, — подавляющее большинство моих сокурсников (специальность ИВТ, квалификация — инженер-программист) об STL не знали к моменту выпуска, все какие-то велосипеды городили. А вы говорите, — STL в первую очередь…
>>об STL не знали к моменту выпуска

беда… во всех книгах по С++ есть глава по STL, это получается что дальше первых глав они книги не читали, если вообще читали…
нет слов, одни эмоций…
Ничего они не читали. Украл (купил)-сдал-забыл.

Правда, не все, конечно.
Правда, некоторые не разменивались на С++, а сразу сели за C# и далее убеждали, что там все сделано для программиста. Сборщик мусора тот же… Как вы поняли, я не очень высокого мнения о таком подходе, потому что сколько бы ни было удобств для программиста в языке, без понимания, как оно устроено и с чего все начиналось, код будет сплошным Г. Так что да, одни эмоции.
С++ не краеугольный камень программирование, практика показывает что большая часть моих знакомы программистов который пишут на Java, C#, Python, PHP знают плюсы на уровне «сдал и забыл». Так что не чего страшного что твой одногрупники не знают STL, главное что бы они хорошо разобрались в том языке который они для себя выбрали.
Вообще это так, конечно. Заочно желаю своим одногрупникам писать хороший код и развиваться.
Наоборот не сложнее, а Qt учится проще и быстрее, чем pure C++
По мне так статья — это обычный пересказ Шлее. И где же QArray?
В любом случае, полезно. Книгу не нагуглить, да и не у всех она есть.
Ну хотелось бы на Хабре видеть что-то новое и интересное. А это лучше бы в вики выложить на русскоязычном комьюнити.
Есть и новое, есть и старое, есть и убогое). Кому-то будет полезно, не только хаброюзерам он и прочим пользователям интернета.
да там это тоже не нужно, как по мне, это жe не более чем кривой пересказ кусков Assistant еще и с ключевыми опечатками. Например:

iowerBound() — Возвращает итератор,

или

при помощи метода containts() контейнера.


Вообще капитанская какая-то статья.
> P.S. Данная статья ориентирована на обучение начинающих программистов.
А опечатки то указанные тоже принципиально не исправляете? Чтобы «начинающие погромисты» окончательно запутались?
А я тут при чем? Статья не моя). Уверен, автор все поправит.
УПС :) Извините, обознался.
Начинание хорошее. Мы-то с вами уже выросли, для нас этот материал новым не будет. А вот есть люди, которые только ступили на эту дорогу, — им в самый раз.

Хотите новое? А загляните в прошлые топики интересующих вас блогов. Не может же быть такого, что вы всё оттуда читали, — обязательно что-нибудь найдете.

А вообще, меня жажда нового привела к изучению других языков программирования (Haskell), и это одна из лучших вещей, которая со мной случилась в этом году. Рекомендую!
Тоже заметил немного. А вообще смысл есть — многие до сих пор думают, что Qt только для GUI фреймворк.
Тогда лучше писать про сеть и бд. Честно говоря непонятно перечисление стандартных контейнеров.
+ приметивы синхронизации и высокоуровневые API по работе с ними.
Спасибо, хорошая статья для начинающищ. Что я заметил:

QByteArray очень похож на QVector, но разница заключается в том, что это не шаблонный класс, и в нем допускается хранение только элементов, имеющих размер один байт.


Шаблонный он или не шаблонный — это детали реализации. Разница в том, что QByteArray хранит байты, QVector — объекты. В QByteArray можно поместить произвольные данные, имеющие размер отличный от одного байта.

Объекты типа QByteArray можно использовать везде, где требуется промежуточное хранение данных. Количество элементов массива можно задать в конструкторе, а доступ к ним получать при помощи оператора []


QByteArray не имеет никакого отношения к начальному, промежуточному или финальному хранению данных — он предназначен для работы с бинарными данными. Хороший пример — принятые по сети данные или содержимое не текстового файла.

Одна из самых распространенных операций — обход списка для последовательного получения значений каждого элемента списка


Приведенный пример — канонический и длинный. На практике все используют макрос foreach:

foreach( QString s, QList< QString >() << "a" << "b" << "c" )
{
    qDebug() << s;
}


При создании объекта QMap нужно передать его размер в конструктор


Конструктор QMap не принимает размер.

тот размер не является, как это принято в других контейнерных классах, размером ограничивающим максимальное количество элементов


В большинстве контейнерных классов переданный размер не ограничивает максимальное количество элементов.

Контейнер QSet можно использовать в качестве неупорядоченного списка для быстрого поиска данных.


Основное назначение QSet — гарантировать, что в множестве нет повторяющихся элементов. Высокая скорость проверки «есть ли такой элемент в множестве» — это побочный эффект, так как QSet — это надстройка над QHash.
Вот просто интересно, а почему QList, а не QStringList? :)
Захотелось заодно показать конструирование через последовательность "<<" :). Насколько я понял, формат статьи — для новичков. QStringList, QVariantList и прочие готовые контейнеры — это на мой взгляд уже продвинутое использование. Если рассматривать эффективность обучения, то сразу их вываливать на голову слушателя череповато поседствиями — утонет в объеме предоставленной информации :(.
На самом деле, с QStringList operator<< тоже будет работать :) Хотя я, помнится, тоже когда не был в курсе отличий между QList и QStringList — просто не знал, что от инстанцированных шаблонов можно наследоваться.
Естественно будет, учитывая что QStringList наследуется от QList :)
Хабрапарсер коварен, съел (я так понимаю, и у вас тоже) параметры шаблона. В моих комментариях выше следует читать QList<QString> вместо QList :)
Расскажите о Q_DECLARE_METATYPE, поддержке информации о типах в Qt. Ведь там можно даже вызывать методы по имени, соединять сигналы/слоты по имени, добавлять свои типы в QVariant, создавать объекты по имени класса, проверять наличие метода в классе. Что позволяет например легко соединять в одном проекте Qt и Javascript. Вот это было бы интересно.
Какая-то бессмысленная статья, на кого она рассчитана? Если на совсем новичков, которые даже не знакомы с STL — то, они ничего не поймут. Если для людей, которые знакомы с STL — то почему здесь нет сравнения с STL, почему не указано, что практически все контейнеры Qt используют парадигму «ленивого копирования», в отличии от STL, какие у неё преимущества, недостатки.

Статья выглядит как копипаст из какого-то обзорного учебника по Qt.
С учетом того, что инвайт выдал автору некий НЛО, статья, однозначно, полезна для хабра. Для кого из людей она полезна — описано выше)
Поправьте описание QQueue. В коде объявлен стек вместо очереди и консольный вывод, если не ошибаюсь, тоже немного другой будет.
Спасибо. Поправил. Это все злобный копипаст.
UFO just landed and posted this here
UFO just landed and posted this here
Sign up to leave a comment.

Articles

Change theme settings