4

23.2のC++標準ドラフトn3242は、コンテナ要件を含むテーブルでX::reference、コンテナを含む場合はであるT必要があると述べていますlvalue T。ただし、vector<bool>vector<bool>::reference別のクラスであり、ベクトルに格納されているバイトの個々のビットにアクセスするためのプロキシです。

std::vectorこれは、標準で定義されているのクラステンプレート仕様がT = boolコンテナ要件を満たしていないことを意味しますか?

4

4 に答える 4

10

std::vectorこれは、標準で定義されているのクラステンプレート仕様がT = boolコンテナ要件を満たしていないことを意味しますか?

はい。

operator*同様に、そのイテレータは、プロキシオブジェクトを生成するため、真にランダムアクセスのイテレータではありません。

vector<bool>混乱です。

于 2012-10-01T17:44:36.410 に答える
7

はい、ここで素晴らしい説明とともに述べられています。

于 2012-10-01T17:45:06.183 に答える
4

はい、vector<bool>コンテナの要件を満たしていません。かなり明確な意味がありますが、それは主張していません。重要なのは、コンテナの「要件」は正式な意味での要件ではないということです。標準ライブラリには、コンテナの要件を満たすタイプを必要とするものはありません。むしろ、「要件」は説明的です。各コンテナのドキュメントには、vector<bool>「このコンテナは、...を除いて、コンテナの要件を満たしています」と記載されています。

于 2012-10-01T17:47:40.120 に答える
1

はい、そうです。vector <bool>::referenceまず、実際には参照ではなく、同じように見える(クラス)プロキシオブジェクトを使用します。次に、他のベクトルにはないflip()メソッドがあります。また、他のすべてのベクトルとは異なり、Cのような配列への変換はサポートされていません&vec[0]

したがって、実際にはvector <bool>はベクトルではなく、vectorのように見え、そのデータはboolではなくboolのよう見えます。このコンテナは、世界中で「標準化されているが失敗したもの」と見なされています。

于 2012-10-01T17:54:49.280 に答える