Я бы сделал пользовательский контейнер, содержащий вектор векторов (из ... на измерение) и изменил бы размер с помощью функций изменения размера на измерение. Таким образом, вы можете поместить инвариант одинакового размера для одного измерения в одном месте. Фактическое изменение размера может быть затем выполнено в цикле в соответствии с размером.
Там будет немного работы, связанной с обнародованием того, что должно быть доступно (оператор [], ...)