2

彼ら!私は反復子の働きを理解しようとしているので、以下のコードでは、基になるデータ (構造) を変更せずに back_inserter を front_inserter に変更することは可能ですか? 理由を説明してください。変更が可能な場合は、その重要なアイデアを検討してください。

int a1[] = { 0, 1, 2, 3, 4, 5, 6 };
int a2[] = { 1, 4, 5 };
std::vector<int> a3;
int a4[] = { 0, 2, 3, 6 };
std::set_difference(a1, a1 + 7, a2, a2 + 3, std::back_inserter(a3));
assert(std::equal(a3.begin(), a3.end(), a4));

皆さん、ありがとうございました!

4

2 に答える 2

6

挿入反復子は、標準メカニズムを使用してコレクションに何かを挿入する単純な反復子の実装です。の場合、挿入はコンテナーback_inserterでメソッドを呼び出すことによって行われ ます。push_back()したがって、 を使用するback_inserterには、コンテナで を実装する必要がありますpush_back()

同様にfront_inserter、コレクション mush implementを使用しますがpush_front()、これは ではありvector ませんfront_inserterしたがって、では使用できませんvector

list両方ともdequeを実装push_frontしているため、 ではなくどちらかを使用する場合はvector、 を使用できますfront_inserter

于 2013-06-04T20:21:31.050 に答える
1

いいえ、しかしあなたが欲しいのはインサータです:

std::set_difference(a1, a1 + 7, a2, a2 + 3, std::inserter(a3, a3.begin()));
于 2013-06-04T20:16:59.217 に答える