让我们考虑以下代码
#include <vector>
using container = std::vector<int>;
const int size = 1000000;
const int count = 1000;
void foo(std::insert_iterator<container> ist)
{
for(int i=0; i<size; ++i)
*ist++ = i;
}
void bar(container& cnt)
{
for(int i=0; i<size; ++i)
cnt.push_back(i);
}
int main()
{
container cnt;
for (int i=0; i<count; ++i)
{
cnt.clear();
#ifdef FOO
foo(std::inserter(cnt, cnt.begin())); // using cnt.end() gives similar results
#else
bar(cnt);
#endif
}
return 0;
}
我得到了巨大的性能变化
使用 Foo:
$ g++ -g -pipe -march=native -pedantic -std=c++11 -W -Wall -Wextra -Werror -O3 -o bin/inserter src/inserter.cc -DFOO
$ time ./bin/inserter
./bin/inserter 4,96s user 0,01s system 100% cpu 4,961 total
使用栏:
$ g++ -g -pipe -march=native -pedantic -std=c++11 -W -Wall -Wextra -Werror -O3 -o bin/inserter src/inserter.cc
$ time ./bin/inserter
./bin/inserter 2,08s user 0,01s system 99% cpu 2,092 total
有人可以解释为什么有这么多的性能变化,为什么有人要使用std::inserter
?