Я знаю, что стандарт не заставляет std::vector
выделять непрерывные блоки памяти, но, тем не менее, все реализации подчиняются этому.
Предположим, я хочу создать вектор многомерного статического массива. Рассмотрим 2 измерения для простоты и вектор длины N. То есть я хочу создать вектор из N элементов, скажем, int[5]
.
Могу ли я быть уверен, что все N * 5 целых чисел теперь непрерывны в памяти? Чтобы я в принципе мог получить доступ ко всем целым числам, просто зная адрес первого элемента? Зависит ли эта реализация?
Для справки, способ, которым я в настоящее время создаю 2D-массив в непрерывном блоке памяти, заключается в том, чтобы сначала создать (динамический) массив с плавающей запятой * длины N, выделить все N * 5 с плавающей запятой в один массив, а затем скопировать адрес каждого 5-го элемента в первый массив float*
.
std::vector
выделять непрерывные блоки памяти - Да, начиная с C ++ 03. - person kennytm   schedule 24.06.2011std::string
на практике всегда имел непрерывное хранилище элементов, несмотря на то, что это не было явно предписано до C ++ 0x. - person Lightness Races in Orbit   schedule 24.06.2011