本当の問題は、他の場所のコードをクリーンアップするために、ある場所に余分なコードを書く価値があるほど頻繁にこれを行っているかどうかということだと私には思えます。
次のようなことを可能にする a を書くことを想像deref_iterator
できます。
std::vector<T> vector_of_objects{
deref_iterator(std::begin(vector_of_pointers)),
deref_iterator(std::end(vector_of_pointers))};
ここで、これが元のループより本当に短いかどうかという問題が残ります。キーストロークの単純な数に関しては、おそらく、あなたが付けた名前に依存するでしょう。読みやすい名前を気にしない場合は、次のようになります。
vector<T> v_o{d(begin(v_p)), d(end(v_p))};
短い名前は明らかにそれを短くしますが、私は確かにそれらにアドバイスしません-これを入力しただけでなければ、それが何を意味するのかまったくわかりません. 名前を長くすると (数回繰り返す必要があります)、明らかにキーストロークが増えますが、読みやすさに価値がないと考える人は誰もいないと思います。
いずれにせよ、deref_iterator
それ自体が明らかに何らかのコードを占有します。イテレータには、通常約 100 行程度のコードを必要とする十分な定型文があります。これを使用するたびに 1 行のコードを節約できると (やや恣意的に) 決めましょう。それを踏まえると、100回使用すると損益分岐点になります。
コード全体を特徴付ける上でそれが正確かどうかはわかりません。イテレータのコードはほとんどがボイラープレートであり、タイプミスを除けば、実際に問題が発生する可能性はあまりありません。ほとんどの場合、適切なヘッダーを含めてそれを使用するだけで済み、実質的にイテレーター自体のコードを確認する必要はありません。
だとすれば、コードの総行数が増えたとしても、改善として受け入れるかもしれません。1回だけ使用するように書くのは明らかに損ですが、損益分岐点となるために100回も必要ないと思います。