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が存在する場合、または他の状況がある場合のみですか?

