У меня есть две функции ниже. Я выполняю каждый из них около 200 тыс. Раз, со случайными отсортированными векторами (каждая функция получает те же два вектора, но векторы меняются между прогонами). Я немного смущен, потому что мой код работает примерно в 500 мс для всех итераций 200 КБ, тогда как вызов функции STD выполняется в 440 мс. Куда идет ~ 60 мс? Что делает STD (или не делает), что я сделал по-другому?Почему мой код для set_intersection медленнее, чем std?
Я использую Visual Studio 10 на ядре i5.
int getAndIntersectMine(std::vector<int>& resultContainer)
{
std::vector<int> const& vector0 = getSomeVector();
std::vector<int> const& vector1 = getAnotherVector();
const int length0 = vector0.size();
const int length1 = vector1.size();
const int* ptr0 = &vector0[0];
const int* ptr1 = &vector1[0];
int i0 = 0;
int i1 = 0;
int numels = 0;
while(i0 < length0 && i1 < length1)
{
if(ptr0[i0] == ptr1 [i1]) {
resultContainer[numels++] = ptr0[i0];
i0++;
i1++;
}
else if (ptr0[i0] > ptr1[i1])
{
i1++;
}
else
{
i0++;
}
}
return numels;
}
int getAndIntersectStds(std::vector<int>& resultContainer)
{
std::vector<int> const& vector0 = getSomeVector();
std::vector<int> const& vector1 = getAnotherVector();
std::vector<int>::iterator last =
std::set_intersection(
vector0.begin(),
vector0.end(),
vector1.begin(),
vector1.end(),
resultContainer.begin());
return last - resultContainer.begin();
}
как вы измерили? 60 мс не так много и может быть ошибкой измерения, а также – stefan
'getAndIntersectStds' также получает параметр' std :: vector const & resultContainer', правильно? –
Shahbaz
Так как это шаблонный код, вы можете просто посмотреть версию 'std' правильно? –