От a previous question about vector capacity, г-н Бейли сказал:C++ станд :: вектор памяти/распределение
В текущем C++ вы гарантированно что не Перераспределение не происходит после того, как вызов для резервирования, пока вставки не будет принимать размер за пределы значения предыдущего вызова в резерв. Перед вызовом резервирования или после вызова, чтобы зарезервировать, когда размер находится между значением предыдущего вызова для резервирования и пропускной способностью, реализация может быть перераспределена раньше, если она этого захочет.
Итак, если я правильно понял, чтобы гарантировать, что перераспределение не произойдет до превышения емкости, я должен сделать резерв дважды? Не могли бы вы прояснить это?
Я использую вектор в качестве стека памяти, как это:
std::vector<double> memory;
memory.reserve(size);
memory.insert(memory.end(), matrix.data().begin(), matrix.data().end()); // smaller than size
memory.resize(memory.capacity(), 0);
Мне нужно, чтобы гарантировать, что перераспределение не происходит в приведенном выше.
спасибо.
пс: Я также хотел бы знать, если есть лучший способ управления стек памяти подобным образом, кроме вектора
хорошо, спасибо. Я не англоговорящий, и это предложение несколько сбивало с толку мне – Anycorn
@ Марк, я не считаю эту запись очень ясной. 23.3.6.2.2 C++ 0X FCD более ясен: Эффекты: директива, которая информирует вектор о планируемом изменении размера, чтобы он мог соответственно управлять распределением хранилища . После резерва() емкость() больше или равна аргументу резерва, если происходит перераспределение ; и равным предыдущему значению емкости() в противном случае. Перераспределение происходит в этой точке тогда и только тогда, когда текущая емкость меньше аргумента reserve(). Если исключение выбрано иначе, чем конструктор перемещения типа, не являющегося CopyConstructible, эффектов нет. –