:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
1

Qt эквиваленты std сущностей

31.07.2013, 11:59. Показов 4289. Ответов 14
Метки нет (Все метки)

Всем привет.

Какой цели добивались разработчики Qt, дублируя сущности из стандартной библиотеки С++?
Вот например есть qMax эквивалент std::max. Зачем?

Заранее спасибо.
2
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2013, 11:59
Ответы с готовыми решениями:

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка...

STL std::set, std::pair, std::make_pair
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на название темы....

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же...

14
Эксперт С++
5053 / 3114 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
31.07.2013, 15:15 2
Tulosba, начнём с того, что все стандартные контейнеры и алгоритмы не являются конкурентными, т.е. без дополнительной ручной синхронизации их нельзя использовать из разных потоков. В свою очередь, насколько мне известно, всё кьютовые аналоги конкурентные из коробки.
2
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.07.2013, 15:28  [ТС] 3
silent_1991, ну, до контейнеров пока дело не дошло какая "конкурентность" может быть у qMax? Примитивный шаблон с тернарным оператором внутри.

Не по теме:

P.S. В STL есть кстати еще версия с компаратором, а в Qt - нет. (может добавят после моего сообщения:D)

0
Заблокирован
31.07.2013, 18:15 4
Лучший ответ Сообщение было отмечено как решение

Решение

Tulosba, qMax дополнен Q_DECL_CONSTEXPR (типа constextr C++11), std::max - не дополнен ))

Добавлено через 21 минуту
в кьют еще и типы данных свои типа qint8 и это тоже хорошо, мы точно знаем сколько байт какой тип из кьют занимает на любой платформе.
А если о контейнерах говорить - то не такие уж они и эквиваленты.
QVector<bool> работает предсказуемо, на аналог STL ругаются все без исключения.
QList на std::list ваще не похож (там время произвольного доступа O(1) против O(n)) - но есть еще QLinkedList
Еще можешь заглянуть сюда: http://habrahabr.ru/post/149384/ (в QList и QLinkedList с получением размера все нормально)
Видимо тролям не хотелось славливать такие странности от STL, и хотелось независимости.
мы знаем что foreach ниразу не for_each (первый вроде бы создает копию контейнера в некоторых случаях).
Есть разница и при передаче контейнеров кьюта в функции (чето там перемещением, ага xD)

Вобщем они совсем разные, да и если бы они были реально похожи, чето никому не приходило в голову выпилить list из буста... че до кьюта то докапались?

Кстати об исключениях я забыл (перечитывал пост и заметил выделенное слово xD)
контейнеры кьюта кидают исключения? - а STL кидают (ну кроме всяких std::valarray)
4
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.07.2013, 18:41  [ТС] 5
Цитата Сообщение от rrrFer Посмотреть сообщение
qMax дополнен Q_DECL_CONSTEXPR (типа constextr C++11)
согласен. Только не типа, а именно constexpr (если компилятор поддерживает)
Цитата Сообщение от rrrFer Посмотреть сообщение
в кьют еще и типы данных свои типа qint8
Так есть же <cstdint>
Цитата Сообщение от rrrFer Посмотреть сообщение
QVector<bool> работает предсказуемо, на аналог STL ругаются все без исключения.
Кто ругается и как?
Цитата Сообщение от rrrFer Посмотреть сообщение
Кстати об исключениях я забыл
Qt вообще юзает механизм исключений? Применимо ко всей библиотеке, не только контейнеры.
1
Заблокирован
31.07.2013, 19:49 6
Только не типа
"типа" - это жаргон, надо заменить на "на подобии"
Кто ругается и как?
Саттер, например в своих "сложных задачах".
или вот например http://alenacpp.blogspot.ru/2005/06/vector.html
Qt вообще юзает механизм исключений? Применимо ко всей библиотеке, не только контейнеры.
вообще не юзает. Дело вроде бы в том, что иногда кьют взлетает (пускают) на си с классами, а не нормальном С++, поэтому он и не использует всякие новомодные фичи, которые не всегда переносимы. Вместо исключений в кьют используется коды ошибок (и еще все истыкано ассертами, которые удаляются в релизе, поэтому там не будет лишних проверок - ну кроме случаев когда возвращается код ошибки).

Сравни например:
C++ (Qt)
1
2
3
inline const T &QVector<T>::at(int i) const
{ Q_ASSERT_X(i >= 0 && i < d->size, "QVector<T>::at", "index out of range");
  return d->begin()[i]; }
и аналог STL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const_reference
      at(size_type __n) const
      {
    _M_range_check(__n);
    return (*this)[__n];
      }
//...
void
      _M_range_check(size_type __n) const
      {
    if (__n >= this->size())
      __throw_out_of_range(__N("vector::_M_range_check"));
      }
2
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.07.2013, 21:32  [ТС] 7
Цитата Сообщение от rrrFer Посмотреть сообщение
"типа" - это жаргон, надо заменить на "на подобии"
Если посмотреть на дефайн, то и "типа" и "на подобии" превращаются в constexpr на компиляторах, которые это поддерживают или в пустоту иначе.
Цитата Сообщение от rrrFer Посмотреть сообщение
Сравни например:
at(), вероятно, не лучшая операция для сравнения. В STL всё таки не так много мест, где исключения выходят наружу. В общем случае, можно использовать operator[], который не генерит исключений.
1
1442 / 1323 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
01.08.2013, 17:35 8
Цитата Сообщение от silent_1991 Посмотреть сообщение
В свою очередь, насколько мне известно, всё кьютовые аналоги конкурентные из коробки.
Нет. Берем QVector, там ничего не сказано про потокобезопасность. Потокобезопасно Implicit Sharing, т.е. копирование контейнера при наличие нескольких ссылок и при попытки модификации.

Цитата Сообщение от rrrFer Посмотреть сообщение
в кьют еще и типы данных свои типа qint8 и это тоже хорошо, мы точно знаем сколько байт какой тип из кьют занимает на любой платформе.
это защита от компиляторов, в котором не в полной мере поддерживается С99, не знаю как насчет последних VC, но некоторые версии VC не поддерживали stdint.h
Цитата Сообщение от Tulosba Посмотреть сообщение
Qt вообще юзает механизм исключений?
Да. Но только в новых модулях, что бы не нарушить совместимость. Отсутствие исключений это вроде как анахронизм.
1
Антикодер
1796 / 860 / 48
Регистрация: 15.09.2012
Сообщений: 3,064
02.08.2013, 00:43 9
товарищ во 2-ой лецкии по Qt(на 11:55 мин/сек)
утверждает, что в STL-контейнерах оптимизация сделана по скорости работы, а в Qt оптимизация по памяти.
0
1442 / 1323 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
02.08.2013, 12:33 10
Цитата Сообщение от XRuZzz Посмотреть сообщение
в Qt оптимизация по памяти.
Ты можешь написать свой аллокатор, для stl.

Еще реализация контейнеров различна.
QMap это skip-list-based dictionary, std::map бинарное дерево.
QSet это hash-table-based set, std::set binary search trees.
К примеру QSet и std::set могут быть не взаимозаменяемые в случае, когда требуется порядок.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.08.2013, 13:02  [ТС] 11
Dmitriy_M, только вот про реализацию std::set, std::map и пр. в стандарте ничего не сказано.
0
Каратель
Эксперт С++
6607 / 4026 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.08.2013, 13:07 12
Цитата Сообщение от Tulosba Посмотреть сообщение
только вот про реализацию std::set, std::map и пр. в стандарте ничего не сказано.
в стандарте много чего не сказано, потому и сделали Qt-аналоги
0
1442 / 1323 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
02.08.2013, 13:59 13
Tulosba, есть компиляторы где сделано не так?
Цитата Сообщение от Jupiter Посмотреть сообщение
Qt-аналоги
В данном случае QSet не аналог std::set, т.к. не обеспечивает порядок.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.08.2013, 14:09  [ТС] 14
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
есть компиляторы где сделано не так?
Ничто не мешает им быть. Поэтому опираться на "популярное" решение, считаю не совсем корректным.
0
1442 / 1323 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
02.08.2013, 15:04 15
Tulosba,

Не по теме:


Так уж часто бывает, что в отсутствие стандартов, популярное решение становиться стандартом по de facto

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2013, 15:04
Помогаю со студенческими работами здесь

Std::begin() ,std::end(),std::copy
...// int main() { std::vector&lt;double&gt; data;//Работает cout &lt;&lt; std::begin(data); ...

Std::bind, std::mem_fun, std::mem_fn
В чем разница между функциями std::bind, std::mem_fun, std::mem_fn?

Десятичные эквиваленты
Помогите пожалуйста первые три задания решить! Заранее спасибо!...

найдите десятичные эквиваленты чисел
найдите десятичные эквиваленты чисел, записанных в обратном коде (старший разряд знаковый)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru