Этот вопрос выводится из темы:
векторный резерв c ++
Я использую структуру данных типа vector<vector<vector<double> > >
. Невозможно узнать размер каждого из этих векторов (кроме внешнего) до добавления элементов (double
s). Я могу получить приблизительный размер (верхняя граница) количества элементов в каждом «измерении».
Возможно, стоит использовать решение с общими указателями, но я хотел бы попробовать решение, в котором vector<vector<vector<double> > >
просто имеет .reserve()
достаточно свободного места (или каким-то другим образом выделило достаточно памяти).
Будет A.reserve(500)
(при условии, что 500 - это размер или, альтернативно, верхняя граница для размера) будет достаточно для того, чтобы содержать "двумерные" векторы большого размера, скажем, [1000] [10000]?
Причина моего вопроса в основном в том, что я не вижу способа разумно оценить размер внутренней части A
во время .reserve(500)
.
Пример моего вопроса:
vector<vector<vector<int> > > A;
A.reserve(500+1);
vector<vector<int> > temp2;
vector<int> temp1 (666,666);
for(int i=0;i<500;i++)
{
A.push_back(temp2);
for(int j=0; j< 10000;j++)
{
A.back().push_back(temp1);
}
}
Будет ли это гарантировать, что перераспределение для A не выполняется?
Если при создании были добавлены temp2.reserve(100000)
и temp1.reserve(1000)
, это гарантирует, что перераспределение вообще не произойдет?
В вышесказанном не обращайте внимания на тот факт, что память может быть потеряна из-за консервативных вызовов .reserve()
.
Спасибо всем заранее!