|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
||||||
Сделайте, чтобы двумерный вектор обогнал двумерный массив при заполнении случайными числами07.02.2019, 10:21. Показов 7045. Ответов 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
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 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
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 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 | |
|
Заполнить двумерный массив случайными числами Заполнить двумерный массив случайными числами
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2.
Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|