1 / 1 / 0
Регистрация: 11.05.2012
Сообщений: 5
|
||||||
1 | ||||||
Время доступа к элементам вектора.13.05.2012, 20:38. Показов 3893. Ответов 29
Метки нет (Все метки)
Суть проблемы в том, что я не могу объяснить такое расхождение во времени доступа к элементам динамического, статического массивов и вектора. Время доступа к элементам вектора больше, чем больше размерность. К одномерному в среднем на 50-100мс(1000000 элементов). К двумерному в среднем на 200мс.(1000x1000). К трехмерному (100х100х100) в среднем на 250мс.(это разница во времени между доступом к статич. и динамич. массивам и вектору) При этом учитывая, что скорость доступа к эл.статич. и динамич. массивов примерно равны.
Вот код, который я использовал для трехмерных структур:
0
|
13.05.2012, 20:38 | |
Ответы с готовыми решениями:
29
Скорость доступа к элементам вектора Error C2039 при использовании методов доступа к элементам вектора Время доступа к элементам Обращение к элементам вектора |
14.05.2012, 23:49 | 21 |
Да не как не должен зависить от размера ни скорость ни доступ к элементу так как элементы хранятся строго в одном месте, а значит видут себя так же как и массивы.
В коде я не чего не понял и нехочу, так как там сильно награмаждено.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
14.05.2012, 23:59 | 22 |
Согласен. Код не смотрел, но могу предположить, что вы накапливаете время доступа. У вектора безусловно скорость доступа к элементу ниже чем у простого массива, но как и сказали выше, она никак не должна зависеть от размера.
0
|
Higher
|
||||||
15.05.2012, 08:27 | 23 | |||||
Ну почемууу?
Если опускаться до совсем низкого уровня, то массивы - это всего лишь абстракция, на самом деле есть только непрерывный кусок памяти и указатель на его начало. Во всех трех случаях мы имеем указатель на первый элемент. Затем мы добавляем к этому указателю i * sizeof(...), чтобы получить адрес i-того элемента. Затем мы просто считываем значение из этого адреса. Грубо говоря, все 3 случая эквивалентны этому.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
15.05.2012, 08:39 | 24 |
Ну так везде и пишут, да и логично это. Вектор - шаблонный класс. При доступе к элементу вызывается функция перегрузки оператора. Всегда почему то верил людям и источникам, где это было написано, так как повода сомневаться в их компетентности не было. Везде писали, включая и этот форум, причем кто то из здешних, так сказать, профи - если важна скорость доступа - используйте массивы Си. Вектор же более удобен и высокоуровен. Если Вы думаете по другом, готов услышать Вашу точку зрения.
0
|
Higher
|
|||||||||||||||||||||||||||||||
15.05.2012, 08:51 | 25 | ||||||||||||||||||||||||||||||
Тут важно не то, что я думаю, а то, что есть на самом деле.
Провел небольшой эксперимент. Первый код
И вообще, эти 3 листинга практически эквивалентны.
1
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
15.05.2012, 08:55 | 26 |
Ну возможно разница будет с более сложными алгоритмами/функциями, а с какими опциями компилировался данный код, и какой компилятор?
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
15.05.2012, 09:03 | 28 |
Ну так c O2 и ниже думаю ситуация будет совсем другая. Я про это кстати страницу назад и говорил, что если включить встраивание функций, то будет совсем другой результат. Только вот O3 на практике почти никто не использует, разве что для тестов.
0
|
Higher
|
|||||||||||
15.05.2012, 11:45 | 29 | ||||||||||
Вот такие результаты получаются.
-O0
1
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
15.05.2012, 11:50 | 30 |
Ага Не вектор
0
|
15.05.2012, 11:50 | |
15.05.2012, 11:50 | |
Помогаю со студенческими работами здесь
30
Обращение к элементам вектора QVector доступ к элементам вектора Как получить доступ к элементам вектора Как оптимизировать обращение к элементам вектора? Присвоение значений элементам двумерного вектора Ограничение доступа к элементам UI Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |