Глава 4 – Библиотека контейнеров

Библиотека контейнеров

22 thoughts on “Глава 4 – Библиотека контейнеров

      1. Страница 95. Имелось ввиду, что в разделе “Подсчет значений” в строке кода qCount(list, “mantus”, n) строку “mantus” надо набирать с заглавной буквы. Если набрать как в книге, то алгоритм qCount не находит в списке ничего и “На экране появится цифра 0.”.

  1. В пункте “Регулярные выражения” в таблице 4.13 в описания к круглым скобкам сказано про сохранение в памяти группы найденных символов, но не показывается, как получать к этой группе доступ.

    1. Серафим, на странице 99 есть пример использования круглых скобок с QRegExp rxp(“(.com|.ru)”), надеюсь он прояснит ситуацию.

  2. Начало раздела “Алгоритмы”, пример использования алгоритма qCopy. Правильно ли я понимаю, что строка sizeof(QString) возвращает размер (в байтах) указателя на строку, а sizeof(values) – суммарный размер всех указателей в массиве?

    1. Сергей, да правильно. Тем самым разделив sizeof(values) на sizeof(QString) мы получим количество строк входящих в массив values.

  3. На странице 85 поставило в ступор использование класса QValueList для итератора ::iterator it = list.begin();
    Qt Creator таких ключевых слов и заголовочных файлов не знает.
    Мне подсказали, что это было в qt3.
    Возможно, опечатка?

    1. Спасибо Александр за найденную ошибку.
      QValueList это “гость” из старого издания, правильно должно быть QList::iterator it = list.begin();
      В следующем издании обязательно исправлю.

  4. Стр. 99, проверка числа от 0 до 999
    регулярное выражение в книге: ^\d+\d?\d?$ не отсеивает числа более 999.
    выражение должно быть либо: ^\d{1,3}$, либо ^\d\d?\d?$

    1. Спасибо, Вы правы, если нужно ограничение [0-999], как это упоминается в книге, то из регулярного выражения нужно убрать “+”, то есть регулярное выражение должно выглядеть так “^\\d\\d?\\d?$”.

  5. Приветствую Макс. Прочитал главу и не понял почему тип QList отнесен к спискам. Судя по описанию это получается частный случай вектора, в котором хранятся указатели.

    1. Здравствуйте Антон! Помимо указателей в QList хранятся еще значения элементов, такой тип данных получил название список.

      1. Получается в этом типе используется 2 массива, один с указателями, а другой со значениями? Или это односвязный список?

  6. Страница 81, таблица 4.1. QList – доступ быстро. Но если это односвязный список, то доступ к нему совсем не быстро (тем более, далее в главе Вы пишете, что для по иска лучше использовать вектор.

    1. Павел, в таблице 4.1 ничего не сказано про скорость доступа. Если Вы имели ввиду таблицу 4.4, то в столбце “Доступ” так и указанно QList – Быстро, QLinkedList – Медленно. Может я не правильно понял Ваш комментарий, если Вы имели в виду, что-то другое, то сформулируйте его иначе. Спасибо.

  7. Здравствуйте, Макс! Опечатался, конечно, Таблица 4.4, колонка “Доступ” первой строки. Но на стр.84 первый абзац, последнее предложение, говорит об обратном. Или по “доступом” имелось ввиду что-то другое? Спасибо большое!

    1. Здравствуйте, Павел! Под доступом имеются ввиду метод at() и operator[]. Контейнер QList очень хорошо оптимизирован и использует массив указателей, который гарантирует быстрый доступ к элементам по индексу. На 84 странице Вас видимо смутила формулировка “Плохо приспособлен для поиска определенного элемента по индексу”. Тут имелось ввиду, что она может быть хуже чем при использовании контейнера QVector, так как в векторе доступ к элементу, в идеальном случае, производится напрямую. Надеюсь немного прояснил.

      1. Спасибо за ответ, Макс! Тогда получается, что QList – это больше вектор (как, например, в c#), чем связанный список и отличается от него только двойной операцией доступа (в начале – адрес объекта, потом сам объект). Или вовсе не так? Спасибо

Добавить комментарий