是否可以初始化不可复制对象的向量向量?
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,如果这有所不同)
答案 0 :(得分:1)
这是不可能的; C ++ 03要求vector
的元素是CopyConstructible和Assignable。
Rreference:C ++ 03 [lib.containers.requirements] / 3
存储在这些组件中的对象类型必须符合
CopyConstructible
的要求 类型(20.1.3),以及Assignable
类型的附加要求。
其中“这些组件”表示deque
,list
,queue
,stack
,vector
,map
,set
,bitset
。
(可能有或没有某种方法让它看起来适用于特定的编译器,但这超出了标准C ++的范围。)