私はstd::list<int>とを持っていstd::vector<int>ます。それらから偶数要素を削除し、それらの奇数要素を複製したい。  
私はそれらの両方に2つの異なる機能を持っています:
ベクトル:
std::vector<int> vec_remove_even_duplicate_odd(std::vector<int> target) {
    std::vector<int>::iterator begin = target.begin();
    while (begin != target.end()) {
        if (*begin % 2 == 0) {
            begin = target.erase(begin);
        } else {
            begin = target.insert(begin, *begin);
            begin += 2;
        }
    }
    return target;
}
これはうまくいきます。しかし、同じ関数は次std::list<int>の行にエラーを表示しますbegin += 2:
error: no match for ‘operator+=’ (operand types are ‘std::list<int>::iterator {aka std::_List_iterator<int>}’ and ‘int’)
それを次のように変更すると:
begin = begin + 2
次のメモが表示されます。
note:   mismatched types ‘const std::reverse_iterator<_Iterator>’ and ‘int’
しかし、その行を次のように変更すると:
++begin;
++begin;
それもうまくいきlistます。では、コンテナについて読んでいるときに見逃したかもしれない、この動作とは何でしょうか。
+=の演算子が定義されていないのはなぜstd::list<T>::iteratorですか? そして、なぜ単純な+オペレーターにそのメッセージが表示されるのでしょうか? reverse_iterator?も作成していません。
avectorは連続した構造ですが、alistはそうではありません。しかし、ポストインクリメントが適用可能であることを考えると、それはどのように重要なのでしょうか? この問題は特定listのコンテナのみに固有のものですか、それとも他のコンテナにもこの問題がありますか?