![]() |
|
![]() ![]() ![]() |
|
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 ![]() |
|||
|
||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
до кьюта юзал stl - потом ещё год писал на кьюте, но с stl - а затем переключился на кьютовские контейнеры.
Я не маюсь с "чистотой языка" - главное решить задачу в срок и с максимальным качеством, а на каком языке, или фреймворке - пофиг. -------------------- Дорогу осилит идущий |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
полагаю, неиспользуя контейнеры и алгоритмы вообще не возможно что-либо написать. так что наверняка используешь кутешные контейнеры и алгоритмы. посему, повторю свой вопрос еще раз(в надежде что пойпешь подвох;)): это кутя тебе позволила не учить принцип вывода типов в с++?
![]() Добавлено @ 18:14 ну так покажи мне, как же ты получал тип итератора хотябы list`а, не используя при этом typename ;) Это сообщение отредактировал(а) boostcoder - 13.6.2012, 18:15 |
|||
|
||||
_GRIN_ |
|
||||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
Повторю ответ =)
Естессно в своё время штурировал Шилда, Страуструпа и Элджера (про Макконела молчу). Просто забылось за ненадобностью =) -------------------- Дорогу осилит идущий |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
т.е. ненадобностью ты называешь написание правильного кода? а использование Java-итераторов, при этом, ты не считаешь _лечением_последствий_незнания_принципа_вывода_типов_? я все правильно понял? Это сообщение отредактировал(а) boostcoder - 13.6.2012, 18:21 |
|||
|
||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
boostcoder, утомил =)
Я ты не первый встречаемый мной boost-ер, который борется за чистоту языка. Поверь мне - этот холивар бесконечен. У нас разные цели. У тебя - написать красивый и правильный код. У меня - написать рабочий код, который будет легко сопровождать другим (возможно менее опытным) программистам. Это сообщение отредактировал(а) _GRIN_ - 13.6.2012, 18:34 -------------------- Дорогу осилит идущий |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
причина, скорее всего, в другом...
мне, никто не позволит ###кодить. но даже если бы и позволили - я бы этого не делал. не "тот" я человек. рабочий код - недостаточный критерий. и за рабочий, но "грязный" код - меня бы скорее всего уволили, с соответствующей записью в трудовой. (за использование кути в проекте - получил бы строгий выговор с лишением премиальных. за повторное уличение - уволили бы.) [irony] так что да, у нас разные цели и верификация продукта. [/irony] я недостаточно для этого квалифицирован. это не холивар. это эстетика. ровно как и мытье рук перед едой. (но не все это делают, согласен.) т.е. то, что ты показал, ты называешь красивым и правильным? ![]() там все совсем некрасиво, и ниразу не правильно. прости за прямоту. (как будто попал на другую планету.) Это сообщение отредактировал(а) boostcoder - 13.6.2012, 21:38 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
||||
|
||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
честно, не помню, наверное всётаки через typename - но это было давно =) Во всяком случае когда тот шаблонный метод реализовывал про typename не вспомнил, пока ты не подсказал. Просто сразу на java альтернативу переключился. "на вкус и цвет..." как говорится. Признаться мне мой вариант с java итераторами нравится больше: кода меньше, читается легче. Эт. конечно же имхо. по поводу прямоты - нет проблем =) Опять же исходя и личного опыта, вполне может быть, что через какое-то время я буду полностью с тобой согласен (обретя другие знания) =) Но сейчас вот как-то так =) -------------------- Дорогу осилит идущий |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
mes, т.е. Вы тоже удивлены? оО
я думал я один такой, ан нет - нас двое ![]() Добавлено через 1 минуту и 12 секунд _GRIN_, все что я хотел показать, так это то, что от использования кути - тупеют. возможно ты и это понял. просто признаться не можешь. ну ничего - это пройдет. |
|||
|
||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
=)
-------------------- Дорогу осилит идущий |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Я, наверное, тоже тупею, т.к. использую и Qt и студию 2008, которая не затребовала typename
А вообще-то, если компилятор может разобраться без typename (а студийный и, прости господи, дебилдер - разбираются), то считаю это требование стандарта глупым. Обратите внимание, что я не говорю, что gcc глупый, а студия - умная (скорее наоборот), я лишь говорю о том, что явно лишнее требование в стандарте - глупо. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
это баг студии. об этом писалось множество раз. немогу сейчас нагуглить. mes подскажет. |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
дык я ж и не спорю. я даже говорю
я говорю о том, что само требование - лишнее -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, 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. |