Как стать автором
Обновить

Комментарии 7

Зачем же вы контейнер по значению передаёте? Это же приводит к копированиям. Отсюда и такая разница между вестором и массивом.

Да и вообще, мой личное мнение, этот тест довольно бестолковый.
Хм, и даже в таком виде как у вас, на моей системе результаты вектора и массива получились одинаковые. Чем вы компилировали и с какими конкретно флагами?

Ещё одна проблема тестов, это то что тип аргумента val у вас не зависит от типа данных в массиве, что может приводить к избыточным преобразованиям типов.
Отсюда и такая разница между вестором и массивом.

Неправда. Отчет времени начинается после того, как скопируется массив.

Чем вы компилировали и с какими конкретно флагами?

g++ с флагами -O2 -s -DNDEBUG -std=c++11 (Intel Pentium CPU G850, AMD E2-3000M) и VC++ в release-режиме (остальные процессоры).
Неправда. Отчет времени начинается после того, как скопируется массив.
— да, вы правы.
g++ с флагами -O2 -s -DNDEBUG -std=c++11 (Intel Pentium CPU G850, AMD E2-3000M) и VC++ в release-режиме (остальные процессоры).
— тогда вы можете обратить внимание что на GCC результаты одинаковы. То есть на самом деле это не вектор медленнее, а либо VC что-то не так оптимизирует, либо реализация вектора в стадартной библиотеке VC такая.
Всё равно, делая выводы о vector, нельзя игнорировать таких крупных поставщиков компиляторов, как Microsoft. С моей стороны было бы неправильно проводить измерения, пользуясь одним лишь g++.
Поставьте #define _SECURE_SCL 0 перед включением всех заголовков. Или возьмите VS поновее.
Тест совершенно бессмысленный, т.к. приведённые операции с raw array можно при желании использовать и на векторе через std::vector::data
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории