Есть ли способ сделать std::vector
быстрее на reserving + resizing
?
Я бы хотел добиться производительности, которая была бы несколько эквивалентна простым массивам C.
См. Следующие фрагменты кода:
TEST(test, vector1) {
for (int i = 0; i < 50; ++i) {
std::vector<int> a;
a.reserve(10000000);
a.resize(10000000);
}
}
TEST(test, vector2) {
for (int i = 0; i < 50; ++i) {
std::vector<int> a(10000000);
}
}
TEST(test, carray) {
for (int i = 0; i < 50; ++i) {
int* new_a = new int[10000000];
delete[] new_a;
}
}
Первые два теста в два раза медленнее (4095 ms vs 2101 ms
), и, очевидно, это происходит потому, что std::vector
обнуляет элементы в нем. Есть идеи, как этого можно избежать?
Или, возможно, существует какой-то стандартный (boost?) контейнер, который реализует массив фиксированного размера и кучи?
Спасибо