|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
||||||
Сделайте, чтобы двумерный вектор обогнал двумерный массив при заполнении случайными числами07.02.2019, 10:21. Показов 7082. Ответов 31
Метки нет (Все метки)
Всем привет!
Попробовал сравнить время заполнения векторов в векторе и массивов в массиве (динамические) случайными числами, получаемыми STL генератором. Вот фрагменты кода
first -> длина стороны матрицы n (получается двумерный массив n x n) second -> время заполнения матрицы такого размера случайными числами, передаётся в мой алгоритм построения графиков, который начертил то, что приведено на прикреплённом скрине. Для динамического массива - оранжевый. Для вектора - циан. По оси x размер стороны квадратной матрицы n, по оси y кол-во секунд, затраченное на заполнение матрицы такого размера случайными числами. Чем больше (выше) - тем хуже (медленней). Как видно вектор долго возится (циановые кольца выше оранжевых, то есть затрачено больше времени), массив его обходит по времени. Я делал ставку на вектора в векторе, но они проиграли массивам в массиве по времени выполнения. Предлагаю Вам предложить мне коды, которые бы при равноценных условиях заполняли случайными числами по STL и вектора в векторе и таким же образом массивы в массиве, но чтобы вектор выиграл по времени. Возможно я использовал недостаточно чёткий алгоритм заполнения векторов и массивов.
0
|
||||||
| 07.02.2019, 10:21 | |
|
Ответы с готовыми решениями:
31
Задать двумерный массив со случайными числами Заполнить двумерный массив случайными числами |
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
|
| 07.02.2019, 14:55 [ТС] | |
|
Сравнил работу оператора [] для обращения по индексу и метода at() для обращения по индексу. Результаты почти одинаковы. В пределах ошибки.
0
|
|
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
|
| 07.02.2019, 18:05 [ТС] | |
|
Такое ощущение что оператор [], перегруженный для экземпляров вектора, вызывает метод и/или проверяет указанный индекс на предмет выхода за границы диапазона.
Добавлено через 2 минуты Я попробовал за передлы индекс указать, выпало исключение vector subsctipt out of range. Значит проверяет всё таки? Иначе бы просто разрешил обратиться в ячейку памяти в окрестностях массива, обслуживаемого данным экземпляром вектора. Оказалось это не выброс исключения, а просто вылет программы при выполнении. А вот at скинул исключение при выходе за границы.
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 07.02.2019, 19:48 | ||
Сообщение было отмечено SomniPhobia как решение
Решение![]() Еще бы у вас не было расхождений. В Debug режиме у библиотечных классов куча доп. проверок, чтобы ускорить отладку и отключена оптимизация. Никто не меряет производительность в отладочном режиме, просто потому что он не для этого.
1
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 07.02.2019, 20:08 | |
|
DrOffset, я делал замеры в релизе, лично мне не удалось поймать существенных различий, в ТС какая-то другая ситуация и это все из-за дебага?
0
|
|
|
Неэпический
|
||||||
| 07.02.2019, 20:46 | ||||||
Сообщение было отмечено SomniPhobia как решение
Решение
https://wandbox.org/permlink/2QVHwvTv7ad0YWA6
1
|
||||||
|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
||
| 07.02.2019, 21:02 | ||
|
(поменяли копию массива вектора h).
0
|
||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
||||||
| 07.02.2019, 21:04 [ТС] | ||||||
|
DrOffset, Azazel-San, в режиме release совсем другой результат.
Спасибо DrOffset. Всё дело в режиме запуска оказалось. Вот код, на который построены прикреплённые графики. В режиме релиза на 1млн и на 2 млн построилось за считанные секунды. В дебаге - несколько минут потребовалось.
0
|
||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 07.02.2019, 21:19 | |
|
SomniPhobia, ну вот и совпали, я что-то не подумал что Вы тестили в дебаге, я знал что нельзя делать замеры в дебаге, но честно сказать не думал что такая сильная разница будет, но видимо особенно это бьет по STL контейнерам, как и сказал DrOffset из-за всяких проверок.
1
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 07.02.2019, 21:20 | |
|
2
|
|
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
||||||
| 07.02.2019, 21:31 [ТС] | ||||||
|
Croessmah, здравствуйте!
Вот на Ваш вариант кода замеры. Время в миллисекундах отложено на графике.
0
|
||||||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
|
| 07.02.2019, 21:49 [ТС] | |
|
SerVal, не копию. Метод data() вернул указатель на массив, который обслуживает текущий экземпляр класса вектор. Я проверял - назначил значения через h, потом прочитал через v[i] ответы были, то есть там числа были занесены в сам вектор.
Croessmah, Вы даже сделали так, что на дебаге совпали значения вектора и массива, образующих матрицу.
0
|
|
|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
|
| 08.02.2019, 00:37 | |
|
А.. понятно.. Переменные типа auto x = auto start + auto finish
... сразу и не поймёшь, где объект, а где указатель на него.
0
|
|
| 08.02.2019, 00:37 | |
|
Заполнить двумерный массив случайными числами Заполнить двумерный массив случайными числами
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|