C++ 3d.Комментарии


Конструкторы


То есть каждый из 10 000 элементов vr инициализируется конструктором Record(), а каждый из s1 элементов контейнера vi инициализируется int().

Инициализация 10 000 элементов конструктором по умолчанию не может не впечатлять -- только в очень редком случае нужно именно это. Если вы выделяете эти 10 000 элементов про запас, для последующей перезаписи, то стоит подумать о следующей альтернативе: vector<X> vx; // объявляем пустой вектор vx.reserve(10000); // резервируем место воизбежание "дорогих" // перераспределений в push_back() // ... vx.push_back(x_work); // добавляем элементы по мере надобности

О ней тем более стоит подумать, т.к. даже в отличной реализации STL 3.2 от sgi конструктор vector<int> vi(s1);

подразумевает явный цикл заполнения нулями: for (int i=0; i<s1; i++) vi.elements[i]=0;

и требуется достаточно интеллектуальный оптимизатор для превращения этого цикла в вызов memset(): memset(vi.elements, 0, sizeof(int)*s1);

что значительно улучшит производительность (конечно не программы вообще, а только данного отрезка кода). Matt Austern поставлен в известность, и в будущих версиях sgi STL можно ожидать повышения производительности данного конструктора.




- Начало -  - Назад -  - Вперед -