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ます。vectormapsetbitset

(特定のコンパイラで動作するように見える方法がある場合とない場合がありますが、それは標準 C++ の範囲を超えています)。

于 2014-11-30T20:57:23.450 に答える