以下の2つの機能があります。ランダムにソートされたベクトルを使用して、それぞれを約200K回実行します(各関数は同じ2つのベクトルを取得しますが、ベクトルは実行ごとに異なります)。私のコードは200Kの反復すべてで合計約500ミリ秒で実行されるのに対し、STD関数呼び出しは440ミリ秒で実行されるため、少し混乱しています。〜60msはどこに行くのですか?私が違ったやり方で行ったSTDは何をしている(またはしていない)のですか?
コアi5でVisualStudio10を使用しています。
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();
}