Accelerated C ++を読んでいますが、以下に投稿された質問についていくつかの提案が必要です。
このコードは何をしますか?
vector<int>u(10,100) vector<int>v; copy(u.begin(), u.end(), v.end());
プログラムを修正するための2つの可能な方法を提供し、その長所と短所をリストします。
最初の部分はかなり単純でしたが、2番目の部分で助けが必要です。私は3つのアプローチを提供しましたが、これ以上可能な解決策があるかどうか疑問に思っています。
また、自分のアプローチの長所と短所がわかりません。やってみましたので、ご意見をお聞かせください。
copy()
std::vector<int> u(10, 100);
std::vector<int> v;
std::vector<int> w ;
std::vector<int> x ;
std::copy(u.begin(), u.end(), back_inserter(v)); // 1st way of doing
利点
std::copy()
イテレータの値は変更されません- のパラメータは
std::copy()
特定のコンテナに依存しないため、コードは別のコンテナで再利用できます
短所
std::back_inserter()
シーケンシャルコンテナでのみ機能するため、マップでは使用できません- の3番目のパラメーターに間違ったイテレーター値を割り当てても
std::copy()
、コンパイラー・エラーは発生しませんが、プログラムの動作が異なる場合があります。
insert()
w.insert(w.end(), u.begin(), u.end() );
利点
insert()
ほとんどのコンテナで使用できます
短所
何も考えられない。
push_back()
for ( std::vector<int>::const_iterator it = w.begin(); it != w.end(); ++it )
{
x.push_back( *it );
}
利点
カントは何でも考えます。
短所
std::copy()
またはに比べて遅いvector::insert()
。
私のアプローチは正しいですか?他にどのような解決策がありますか?