Инициализация вектора вектора очень медленная - PullRequest
3 голосов
/ 21 июня 2011

У меня есть вектор векторов, и я пытаюсь инициализировать его следующим образом:

vector<vector<float> > matrix(numberOfRows, vector<float> (numberOfCols));

Но эта строка длится около 0,89, где numberOfRows и numberOfCols:

const uint32_t numRows = 10000;
const uint32_t numCols = 20000;

Принимая во внимание, что инициализация динамического массива с помощью следующего кода занимает 0,04 с:

float **matrix = new float*[numberOfRows];
for (size_t i = 0; i < numberOfRows; ++i)
    matrix[i] = new float[numberOfCols];

Я что-то не так делаю, есть ли более быстрый способ инициализации этого вектора?

Редактировать:

Что касается вопросов:

Я использовал g ++ - 4.5 для тестирования, используя уровень оптимизации O3 со стандартом по умолчанию.

1 Ответ

9 голосов
/ 21 июня 2011

Разница в том, что вектор инициализируется нулем, а динамический массив - нет.С 200 миллионами значений это заметно.

У вас есть возможность отложить инициализацию строк вектора до тех пор, пока у вас не появятся реальные значения для их назначения, не расширяя столбцы при инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...