Russian Qt Forum
Ноябрь 24, 2024, 19:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
QList, last()
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QList, last() (Прочитано 12699 раз)
pakulo
Гость
QList, last()
«
:
Июль 11, 2007, 14:49 »
Меня интересует такой вопрос...
В списке QList хранится указатель на первый и последний элемент ?
Т.е. если я вызываю last() то оно не пробегает по всему списку что вервуть последний элемент?
Записан
SABROG
Гость
QList, last()
«
Ответ #1 :
Июль 11, 2007, 14:50 »
Нет конечно
Ведь в листе содержится информация о количестве элементов. Значит конец это QList[QList.size()-1]
Записан
pakulo
Гость
QList, last()
«
Ответ #2 :
Июль 11, 2007, 14:58 »
А как тогда сохраняются элементы в списке? Ведь это динмаческий список...
Я вот что-то думал что QList хранит элементы сохраняя указатель на следующий элемент и на начало списка...
>>Значит конец это QList[QList.size()-1]
Ведь что бы получить обьект таким образом, нужно пройтись по всему списку?
Записан
SABROG
Гость
QList, last()
«
Ответ #3 :
Июль 11, 2007, 15:02 »
Цитата: "pakulo"
А как тогда сохраняются элементы в списке? Ведь это динмаческий список...
Я вот что-то думал что QList хранит элементы сохраняя указатель на следующий элемент и на начало списка...
>>Значит конец это QList[QList.size()-1]
Ведь что бы получить обьект таким образом, нужно пройтись по всему списку?
Зачем ? Когда ты объявляешь QList ты указываешь тип данных которые будут в нем храниться, т.е. QList уже знает сколько байт занимает один элемент данных. Он знает сколько данных у него есть. Значит операцией умножения размера одного элемента на нужных индекс ты получаешь сразу же область памяти по которой находится элемент с твоим индексом.
Т.е. если у тебя элементов на 4Гб QList просто производит арифмитическую операцию с указателем.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
QList, last()
«
Ответ #4 :
Июль 11, 2007, 15:17 »
Вообще то QList не размещает данные в сплошном участке памяти.
Так делает QVector.
Скорее QList просто хранит указатели на 1 и послений элементы, и каждый элемент хранит указатель на предыдущий и следующий.
Так что, чтобы достать элемент №100, он пробежит по всем 99 предыдущим.
Для произвольного доступа желательно юзать QVector.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
SABROG
Гость
QList, last()
«
Ответ #5 :
Июль 11, 2007, 15:47 »
Цитировать
For most purposes, QList is the right class to use. Its index-based API is more convenient than QLinkedList's iterator-based API, and it is usually faster than QVector because of the way it stores its items in memory. It also expands to less code in your executable.
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
QList, last()
«
Ответ #6 :
Июль 11, 2007, 15:53 »
QList это тотже QVector только с быстрой вставкой в начало О(1).
Читаем в ассистанте Generic Containers
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
QList, last()
«
Ответ #7 :
Июль 11, 2007, 16:16 »
Про вектор:
QVector<T> is one of Qt's generic container classes. It stores its items in adjacent memory locations and provides fast index-based access.
If you want the items to occupy adjacent memory positions, use QVector.
In addition to QVector, Qt also provides QVarLengthArray, a very low-level class with little functionality that is optimized for speed
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
SABROG
Гость
QList, last()
«
Ответ #8 :
Июль 11, 2007, 16:26 »
Значит я ошибся.
У меня в программе создано около двух десяткой QVariantList (QList<QVariant>), один из них содержит около 200000 записей. Может лучше мне выбрать что-то другое, чтобы быстро заносить данные в массив ? Правда тогда мне придется переписать логику программы и отказаться от bindа в SQL.
Записан
Sergeich
Гость
QList, last()
«
Ответ #9 :
Июль 11, 2007, 16:45 »
Господа, почитывайте Qt Quarterly
http://doc.trolltech.com/qq/qq19-containers.html
Оно сеет доброе, разумное, вечное.
Записан
SABROG
Гость
QList, last()
«
Ответ #10 :
Июль 11, 2007, 16:49 »
Цитата: "Sergeich"
Господа, почитывайте Qt Quarterly
http://doc.trolltech.com/qq/qq19-containers.html
Оно сеет доброе, разумное, вечное.
Там написано, что begin и end храняться отдельно в QList'e
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
QList, last()
«
Ответ #11 :
Июль 11, 2007, 16:53 »
Цитата: "SABROG"
Значит я ошибся.
У меня в программе создано около двух десяткой QVariantList (QList<QVariant>), один из них содержит около 200000 записей. Может лучше мне выбрать что-то другое, чтобы быстро заносить данные в массив ? Правда тогда мне придется переписать логику программы и отказаться от bindа в SQL.
Все зависит от того, что ты делаешь с этим набором данных. Если отсутствует вставка(удаление) в(из) середину(ы) - QVector, QList, если напротив - QLinkedList. Читаем ассистант, там все написано. Конкретно вот раздел Algorithmic Complexity в котором сравниваеться производительность контейноров Qt
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
SABROG
Гость
QList, last()
«
Ответ #12 :
Июль 11, 2007, 16:54 »
Не, у меня просто парсится XML и данные последовательно через append кладутся в QList, после заполнения этот QList передается на Bind который собственно и заносит данные в базу данных.
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
QList, last()
«
Ответ #13 :
Июль 11, 2007, 17:12 »
Если выполняется добавление элеменотов в конец, QVector'а тебе с головой хватит. Если извесно кол-во записей, можешь сделать вектору resize(<кол-во записей>) и обращаться к элементам последовательно по индексу. Так будет быстрее, чем делать 200000 раз append
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
SABROG
Гость
QList, last()
«
Ответ #14 :
Июль 11, 2007, 17:17 »
Количество записей не извесно, можно конечно сделать их извесным пройдясь по всему XMLю, но потом придется проходить еще раз по нему от начала. А QVector вообще как-то совместим с типом QList ? Я использу addBindValue класса QSqlQuery для передачи QVariantList (QList<QVariant>).
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...