1

是否可以初始化不可复制对象的向量向量?

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,如果这有所作为)

4

1 回答 1

2

这是不可能的; C++03 要求 a 的元素vector是 CopyConstructible 和 Assignable 的。

参考:C++03 [lib.containers.requirements]/3

这些组件中存储的对象类型必须满足CopyConstructible 类型(20.1.3)的要求,以及Assignable类型的附加要求。

其中“这些组件”是指deque, list, queue, stack, vector, map, set, bitset.

(可能有也可能没有某种方式让它在特定的编译器上工作,但这超出了标准 C++ 的范围)。

于 2014-11-30T20:57:23.450 回答