Массивы, Как сздавать массивы в Qt |
Здравствуйте, гость ( Вход | Регистрация )
Массивы, Как сздавать массивы в Qt |
Dimix |
2.12.2010, 14:54
Сообщение
#1
|
Студент Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вопрос простой - Как создать масив от ["A".."Z", "a".."z", "1".."9"]
Что бы можно было вытащить случайный элемент из заданного диапазона? Как в Qt использовать random()? |
|
|
Алексей1153 |
2.12.2010, 15:03
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
вот так можно
можно и без вектора, конечно, обойтись. Но придётся вручную вбивать статический массив символов. Но оно того не стОит, если операция разовая |
|
|
Dimix |
2.12.2010, 15:23
Сообщение
#3
|
Студент Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ого вопрос оказывается не настолько прост. Я почти ничего не понял из выше приведенного кода. Что такое std::vector? Почему диапазон задается задом на пред? Почему +1+ между диапазонами и что значит 0 в конце? Почему qrand()? Что означает %? Как задать чтоб вывести к примеру 5 произвольных символов? |
|
|
Dimix |
2.12.2010, 17:47
Сообщение
#4
|
Студент Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата Как задать чтоб вывести к примеру 5 произвольных символов? С этим вопросом разобрался.
Только оно почемуто не работает. qrand() - выводит только квадраты; random() rand() - выводит квадраты и заданый диапазон. И появились новые вопросы что значит %v.size() Почему size? Как сделать чтобы оно выводило только Верхний, Нижний регистры латинского алфавита и цыфры? Отладчик показывает что получено 122 строки с 1 по 60 значение '?', ascii=0 |
|
|
512es |
2.12.2010, 18:35
Сообщение
#5
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
|
|
|
Dimix |
2.12.2010, 19:07
Сообщение
#6
|
Студент Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: 0 |
Понятно без документации и книги дальше мне не шагнуть. Спасибо буду листать Макса Шлее. |
|
|
Алексей1153 |
2.12.2010, 19:14
Сообщение
#7
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Dimix, я точно не ошибся ? Надо на языке Си++ ? Или на каком другом ? ))
>>Что такое std::vector? STL - контейнер, шаблонный класс. Можно заменить статическим массивом, если "не проходили" >>Почему диапазон задается задом на пред? >>Почему +1+ между диапазонами и что значит 0 в конце? символы идут подряд, поэтому я вичислил длину массива под эти символы: последний_символ-первый_символ+1 >>Почему qrand()? потому что гладиолус (с) Цитата int qrand () Thread-safe version of the standard C++ rand() function. Returns a value between 0 and RAND_MAX (defined in <cstdlib> and <stdlib.h>), the next number in the current sequence of pseudo-random integers. Use qsrand() to initialize the pseudo-random number generator with a seed value. This function was introduced in Qt 4.2. See also qsrand(). void qsrand ( uint seed ) Thread-safe version of the standard C++ srand() function. Sets the argument seed to be used to generate a new random number sequence of pseudo random integers to be returned by qrand(). The sequence of random numbers generated is deterministic per thread. For example, if two threads call qsrand(1) and subsequently calls qrand(), the threads will get the same random number sequence. This function was introduced in Qt 4.2. See also qrand(). >>Что означает %? деление по модулю (то есть остаток от деления) >>Почему size? метод такой у вектора - количество элементов в нём |
|
|
Obey-Kun |
2.12.2010, 19:30
Сообщение
#8
|
Студент Группа: Участник Сообщений: 96 Регистрация: 24.3.2010 Пользователь №: 1556 Спасибо сказали: 3 раз(а) Репутация: 0 |
вот так можно
можно и без вектора, конечно, обойтись. Но придётся вручную вбивать статический массив символов. Но оно того не стОит, если операция разовая Во-первых, почему std::vector, а не QVector? Во-вторых, раз уж использовать std::vector, то лучше использовать его фичу по контролю размера — использовать метод at(), а не оператор []. В-третьих, ты забыл про 0. По таблице ASCII, 0 находится перед 1, значит надо for(char c='0'; c<='9';c++). Кстати, сначала тупил над qrand()%v.size(), пока не понял, что это действительно будет число от 0 до v.size()-1 . Просто я всегда делаю qRound(max*qrand()/RAND_MAX), но твой подход получше будет . За это спасибо. А ещё можно обойтись без массивов. Но если честно, мне код писать лень. И ещё, автор, не забудь сделать qsrand() . Сообщение отредактировал Obey-Kun - 2.12.2010, 20:37 |
|
|
Алексей1153 |
2.12.2010, 20:59
Сообщение
#9
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Obey-Kun, я пользуюсь STL, так как это стандарт языка. Кутешными контейнерами пользуюсь только при необходимости - когда метод требует ссылку. А "at" тоже не пользуюсь, так как я всегда контролирую индекс (чего и всем советую ) Це не фича, а скорость (собственно, привычка контролировать индекс проистекает из того, что я начал пользовать STL с год назад, а до этого активно отрицал, пока вдруг не понял, что это наигрался с низким уровнем до нехочу, а STL - это существенное увеличение скорости написания программ + меньше глюков по невнимательности)
про '0' в условии задачи нету qrand()%v.size(), пока не понял, что это действительно будет число от 0 до v.size()-1 . Просто я всегда делаю qRound(max*qrand()/RAND_MAX), это немного разное: qrand()/RAND_MAX - обеспечивает коэффициент 0.0<k<1.0 (не ставлю <=, так как такого не бывает в реальности ))) ) N%v.size() - обеспечивает невыход за границу массива (хотя, впрочем, распределение будет примерно таким же) Сообщение отредактировал Алексей1153 - 2.12.2010, 21:01 |
|
|
Obey-Kun |
2.12.2010, 22:11
Сообщение
#10
|
Студент Группа: Участник Сообщений: 96 Регистрация: 24.3.2010 Пользователь №: 1556 Спасибо сказали: 3 раз(а) Репутация: 0 |
Цитата я пользуюсь STL, так как это стандарт языка. Кутешными контейнерами пользуюсь только при необходимости - когда метод требует ссылку. А Контейнеры в Qt создали в том числе потому потому, что STL в полной мере реализован не везде. Так что если делать кроссплатформенное ПО, то не вижу смысла от них отказываться. Если честно, я вообще не вижу смысл не использовать все фичи Qt, если в проекте используется Qt. Цитата qrand()/RAND_MAX - обеспечивает коэффициент 0.0<k<1.0 (не ставлю <=, так как такого не бывает в реальности ))) ) Упс, я там накосячил ещё и накосячил, верно. Короче, дурацкий у меня подход, qrand()%(max+1) гораздо лучше (если мы хотим число от 0 до max). Сообщение отредактировал Obey-Kun - 2.12.2010, 22:17 |
|
|
Текстовая версия | Сейчас: 22.12.2024, 8:03 |