С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Скорость доступа к элементам вектора - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проблема с рандомом + помощь в создании алгоритма http://www.cyberforum.ru/cpp-beginners/thread335111.html
Такая штука - делаю одну прогу (игра напоминающая бомбермен)... Решил отдельнонаписать прожку в которой юзер начинает матч - боты сами ходят и коцают друг друга ... ПРОБЛЕМА, только и заключаеться...
C++ Из цифр в буквы Скажите как перейти из цифрового номера буквы в ANSI обратно в букву. Как букву в цифру превратить я знаю cout<<(int)'A'; http://www.cyberforum.ru/cpp-beginners/thread335039.html
Решение суммы ряда C++
Не раз видел задачки типа "Дано вещественное число Х и целое число N (>0).Найти значение выражения 1-х^2/(2!)+x^4/(4!)-...+(-1)^n*X^(2*n)/((2*N)!) (N!=1*2*...*N). ... " , не понимал и откладывал в...
Русский язык в консоли C++
Скажу сразу, что закрепленную тему я прочитал, но не очень понял, как это реализовать. Вот код, текст выводится неизвестными символами. Будьте добры, переделайте программу так, что отображался...
C++ Посоветуйте open source проект http://www.cyberforum.ru/cpp-beginners/thread334996.html
Посоветуйте, пожалуйста, хороший open-source проект на котором можно поучиться. Критерии: 1. Лицензия GNU/GPL, BSD etc. 2. Основные языки C/C++ 4. Платформа - Windows 3. Хорошая документация и...
C++ Перемножение матриц. Нужен код для перемножения матрицы и столбца за минимально возможное время. Порядок матрицы ( и столбца ) огромен - около 100000. Помогите найти оптимальный код! Ищу уже 2 день... что-то... подробнее

Показать сообщение отдельно
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.07.2011, 10:36
Итератор вектора в основном используется последовательно со смещением адресов, а получение данных по-индексу массива это получается без смещения указателя
vector[index], у себя тестировал скорость была пропорциональной что с доступ со смещением что без смещения один фиг пачка инструкций одинаковая.
Kastaneda, правильно сказал что at(index) использует проверки, скорость ниже будет чем у [].

Вот пример привёл.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <windows.h>
#include <iostream>
#include <vector>
using namespace std;
 
 
int main(void) {
 
   vector<long> vec, tmp;
   vector<long>::const_iterator iter;
 
   for(long l = 1e+6; l--; vec.push_back(1e+5 * ((long)rand() % 10)) );
 
 
   DWORD  start = GetTickCount();
 
   /*
   for(iter = vec.begin(); iter != vec.end(); *iter++)
        tmp.push_back(*iter);
   */
 
 
   for(long i = 0L; i < vec.size(); i++)
        tmp.push_back( vec[i] );
 
   tmp.clear();
   cout << "elapsed = " <<  GetTickCount() - start << '\n';
 
 
 
   int index = 5;  // получим шестой элемент
 
   iter = vec.begin();
 
   // вот доступ к элементу без cмещения как vector[index]
   cout <<  *((iter) + index)  << '\n';
 
   // доступ со смещением указателя как работают обычно с итераторами
   iter += index;
   cout << *iter  << '\n';
 
 
   //  перефразируем всё в ASM
   long a, b;
 
   iter = vec.begin();
   __asm {
          mov  esi, iter
          mov  edx, dword ptr index
 
          //доступ без смещения указателя
          mov  ebx, [esi+edx*4]
          mov  dword ptr a, ebx
 
          // доступ со смещением указателя
          mov  eax, 4
          mul   edx
          add   esi, eax
          mov  ebx, [esi]
          mov  dword ptr  b, ebx
   };
 
   cout << "a = " << a << "\nb = " << b << '\n';
 
   cin.get();
   return 0;
}
snayperAlfa, на последок ты когда тестируешь какие-нибудь алгоритмы сравнивая скорость между ними запускай их не один раз а хоть 20-100 раз только после этого нужно сравнивать скорость, ведь система windows не является реального времени, вдруг когда ты первый раз запустил свой алгоритм в это время какая ни будь служба в система обрабатывала данные, а во второй раз она была в режиме ожидания wait, то есть даже тот же алгоритм будет всегда показывать разные временные показатели.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.