![]() |
|
![]() ![]() ![]() |
|
Aurus |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 14.8.2005 Где: Новосибирск Репутация: нет Всего: 0 |
Всем привет.
Есть файл со значениями x,y для вывода зачений в программе и построения графика: 1.567,4.876 3.567,-1.765 0.987,1.004 ...... Считываю сначала первую колонку значений в List<float> x; затем вторую в List<float> y; Весь файл я считываю в QString, приходиться преобразовывать тип QString в float, читал что преобразование типов - это сигнал что в программе что-то делается не так. Можно ли в моём случае избежать преобразования типов? Приходится вручную указывать количество колонок для построения таблицы дл вывода значений x,y в виджете. В перспективе будет ещё координата z. Вот думаю что лучше использоваать двух,трёх-мерный QList или Map? В Qt есть возможность использовать итераторы в стиле Java и STL, какие предпочтительнее? |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Лучше считывать сразу обе координаты например в QList<QPointF>.
Преобразования из строки (не обязательно QString) в число не избежать - ведь числа хранятся в файле в виде строк. Какой тип итераторов будешь использовать - безразлично. Я предпочитаю использовать foreach - так писать меньше, хотя код генерится не оптимальный. Добавлено через 4 минуты При появлении координаты z класс QPointF нужно будет заменить на свой, позволяющий хранить три координаты или если нужно, более. |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Еще необходимо проследить за локалью, иначе конвертация строки в число может закончиться неприятным сюрпризом.
|
|||
|
||||
borisbn |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
не так категорично... Представь, что некий датчик даёт тебе пройденное расстояние в метрах. В целых. Т.е. с точночтью до метра. Тебе нужно вычислить скорость. Ты вычисляешь время с точностью до секунды (предположим больше не нужно), а затем делишь целое число метров на целое число секунд. Результат не обязан быть целым. А то, что ты читал, это, скорее всего, когда указатель одного типа преобразуется в указатель другого (это совершенно не относится к указателю на наследника и указателю на бозовый типы). В этом случае - да, что-то неладное с программой.
Лучше всего создать свою структуру. Типа такого
В этом случае при добавлении в файл третьего измерения в твоём коде будет минимум изменений (во всяком случае в функции str_2_point - вообще не будет) Добавлено через 4 минуты и 48 секунд
Я бы посоветовал в Си++ (к коему Qt относится) использовать STL-итераторы - их можно отдавать в стандартные алгоритмы. Я думаю, Java-итераторы введены для тех, кто раньше много писал на Java и ооооочень привык к ним. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||
|
|||||||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
Был у меня случай, когда использовать STL итератор не получилось, но Java итератор отработал на ура.
Первоначальный вариант был на stl итераторах, но он не скомпилился - подробностей не помню =) Это сообщение отредактировал(а) _GRIN_ - 13.6.2012, 15:39 -------------------- Дорогу осилит идущий |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
_GRIN_, чтоб не пришлось городить _лечение_последствий_ вроде приведенного, в контейнерах нужно хранить смарты
![]() |
|||
|
||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
boostcoder, полностью с тобой согласен (насчёт смартов) =)
Но суть не в том, что хранится в контейнере, а в том, что в том случае у меня не получилось использовать stl итераторы, и прошлось java итераторы заюзать. -------------------- Дорогу осилит идущий |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
ну я и говорю - _лечение_последствий_
|
|||
|
||||
borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
_GRIN_, ты, наверное, пытался работать с итератором QMap как с итератором std::map, а они отличаются
Твоя функция для STL-итератора в QMap'е д.б. выглядеть так:
Добавлено через 3 минуты и 7 секунд А вообще-то да... если хранить QSharedPointer, например, то функция выглядела бы так
![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
_GRIN_ |
|
||||||||||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
=) шутники:
лог сборки:
теперь мой вариант:
лог сборки:
лог выполнения:
P.S. Про смарты (QSharedPointer как смарт) я уже писал что согласен =) просто не всегда есть возможность перелопатить весь код (особенно когда работаешь в команде на большим проектом с жёсткими дедлайнами и каждая измененённая строка это головная боль). Это сообщение отредактировал(а) _GRIN_ - 13.6.2012, 17:38 -------------------- Дорогу осилит идущий |
||||||||||
|
|||||||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
|
|||
|
||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
boostcoder, ага, с typename stl вариант работает.
-------------------- Дорогу осилит идущий |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
_GRIN_, это азы.
вот ты мне честно скажи, это кутя тебе позволила не учить принцип вывода типов в с++? |
|||
|
||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
boostcoder, я за 7 лет практики ни разу не использовал typename (на кьюте я с 2008-го) =).
-------------------- Дорогу осилит идущий |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
аааа...
наверное шаблоны и стандартные контейнеры не используешь. хотя я хз, что/как можно писать не используя STL ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |