Можно ли инициализировать вектор векторов не копируемых объектов?
class obj : private boost::noncopyable {
// ...
};
vector<vector<obj> > v(10); // OK
for(int i = 0; i < v.size(); ++i)
v[i].resize(10); // ERROR
также
vector<vector<obj> > v(10, vector<obj>(10)); // ERROR
я понимаю Зачем приведенный выше код не скомпилируется. Я спрашиваю, есть ли обходной путь. Кажется, что если std::vector
была функция-член, как resize_from_zero
для этого не нужен конструктор копирования, тогда это будет выполнимо.
(Мой вопрос о C ++ 03, если это имеет значение)
Это невозможно; C ++ 03 требует, чтобы элементы vector
быть CopyConstructible и Assignable.
Ссылка: C ++ 03 [lib.containers.requirements] / 3
Тип объектов, хранящихся в этих компонентах, должен соответствовать требованиям
CopyConstructible
типы (20.1.3) и дополнительные требованияAssignable
типы.
где «эти компоненты» означает deque
, list
, queue
, stack
, vector
, map
, set
, bitset
,
(Там может быть или не быть какой-то способ заставить его работать на конкретном компиляторе, но это выходит за рамки Standard C ++).