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

Неожиданный результат при сравнении производительности вектора и обычного массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вставить новый столбец в матрицу после столбца, в котором нет отрицательных http://www.cyberforum.ru/cpp-beginners/thread1243306.html
Вставить новый столбец после столбца, в котором нет ни одного отрицательного элемента. Вот, что сделала я. Но у меня программа не работает. как ее изменить? #include <iostream>...
C++ Остаток от деления, числа в виде массивов Друзья, подскажите пожалуйста идею для алгоритма. Проблема следующая, есть два числа, они оба представлены в виде массива, например, число 256 представлено как а={2,5,6} и например b={7,3,5,6}.... http://www.cyberforum.ru/cpp-beginners/thread1243249.html
C++ DLL компилируется, но не вызывается в приложении C#
Здравствуйте, есть DLL, компилируется без ошибок, но вызвать из C# её не получается, вот код: #define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <io.h> #include <fcntl.h> #include...
Найти максимальное число из 4-х переменных C++
Найти максимальное число из 4-х (возможно разных) переменных
C++ Перевод из String в long long http://www.cyberforum.ru/cpp-beginners/thread1243139.html
Мне нужна функция для перевода из String в long long.Функция atoi(const char* str) работает только с констатным масивом символов а мне нужен именно string(переменный).Сам C++ учу недавно в паскале с...
C++ Случайное распределение кораблей по полю в игре "морской бой" Привет всем кто читал мой предыдущий пост про векторы в морском боем, в той же фунции появилась новая проблема :) После починки функции появилась новая проблема - иногда при тестировании возникает... подробнее

Показать сообщение отдельно
MAKAPOH
30 / 20 / 1
Регистрация: 08.09.2012
Сообщений: 77

Неожиданный результат при сравнении производительности вектора и обычного массива - C++

16.08.2014, 15:54. Просмотров 1041. Ответов 8
Метки (Все метки)

Добрый день.
Ради интереса сравнил проиводительность вектора с обычным массивом и получил неожиданный результат.
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
#include <iostream>
#include <chrono>
#include <vector>
 
int main()
{
  const std::size_t N = 40000000;
  std::vector<std::size_t> vector(N);
  std::size_t *raw_array = new std::size_t[N];
 
 
  auto start_time = std::chrono::high_resolution_clock::now();
  for (std::size_t i=0; i<N; ++i)
    vector[i] = i;
    //vector.at(i) = i;
  auto end_time = std::chrono::high_resolution_clock::now();
  std::cout << "vector: "
            << std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count()
            << " ms\n";
 
 
  start_time = std::chrono::high_resolution_clock::now();
  for (std::size_t i=0; i<N; ++i)
    raw_array[i] = i;
  end_time = std::chrono::high_resolution_clock::now();
  std::cout << "raw array: "
            << std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count()
            << " ms\n";
 
 
  delete [] raw_array;
  return 0;
}
DEBUG: Vector(254ms) Raw array(105ms) - в 2,4 раза быстрее простой массив.
RELEASE: Vector(43ms) Raw array(81ms) - в 1,8 раза быстрее вектор.
Компилятор - Microsoft VisualC++ 12.0 (amd64)
ОС - Windows 7 64 bit

Мой вопрос в том как так получается что шаблонный класс обгоняет простой массив по скорости?
И ещё, если вместо operator[] использовать функцию at() для доступа к элементам вектора, то это никак не влияет на результат (в пределах погрешности измерения) хотя функция at() должна делать проверку на выход за границу размера вектора.
Заранее спаибо за ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.