v2
次のコードは正常にコンパイルされ、値を次の値で上書きしますv1
。
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = {6, 7, 8, 9, 10};
std::copy(v1.begin(), v1.end(), v2.begin());
の3番目の引数std::copy
はOutputIteratorです。ただし、Container要件a.begin()
では、がContainerオブジェクトである場合、次のように定義されa
た戻りタイプを持つ必要があると指定されています。iterator
フォワードイテレータの要件を満たすイテレータカテゴリ。
フォワードイテレータの要件には出力イテレータの要件が含まれていないため、上記の例は未定義ですか?イテレータが1つになるという明確な保証はありませんが、出力イテレータとしてイテレータを使用しています。
begin()
上記のコードは有効であると確信していますが、コンテナの詳細から、返されるフォワードイテレータが実際には出力イテレータの要件もサポートしていることを推測できます。その場合、いつ出力イテレータを返さbegin()
ないのですか?コンテナconst
が存在する場合、または他の状況がある場合のみですか?