Какой порядок для вектора вектора в C ++ - PullRequest
2 голосов
/ 01 мая 2020

Я использую структуру std::vector< std::vector<double> > для хранения двумерных данных в коде C ++ размером NxM. Есть ли проблемы с производительностью, связанные с порядком, в котором я храню свои данные, если N сильно отличается от M?

Например, скажем, N = 3 и M = 100000, я предполагаю, что быстрее построить 3 вектора размером 100000, чем 100000 векторов размера 3. Но, например, если я использую много push_back, чтобы заполнить их (при условии, что я не знаю начальный размер), не другой ли метод быстрее?

1 Ответ

2 голосов
/ 01 мая 2020

Полагаю, быстрее построить 3 вектора размером 100000, чем 100000 векторов размера 3.

Почти наверняка, да (и значительно так)!

... если я использую много push_back для их заполнения (при условии, что я не знаю начальный размер).

Если вы хотя бы знаете (или подозреваете), каким может быть максимальный размер , вы можете использовать функцию reserve(nMax) до того, как l oop с помощью вызовов push_back, затем позвоните shrink_to_fit(nAct) впоследствии, чтобы освободить ненужную память. Такой подход позволил бы уменьшить накладные расходы, вызванные (потенциально многими) вызовами перераспределения.

...