1

for(;;) ではなく STL スタイルで次のことを行うエレガントな方法は何ですか?

p={1,2,3} と q={7,8,9} が与えられた場合、これをマージして pq={1,7,2,8,3,9} にしたいと思います。1 つのアプリケーションでは、アウト オブ ポジション (q) と運動量 (p) を統合するための pq ベクトルを作成しています。

for(size_t i=0; i<p.size();++i) {
 pq.push_back(p[i]);
 pq.push_back(q[i]);
}

それはエレガントではありません、それはstlではありません。それは機能しますが、この質問は、仕事を成し遂げるのではなく、stl-styleを正しく学習することに関するものであるため、https://stackoverflow.com/questions/10746197/how-to-fit-elements-of-two-vectors-alternately-とは異なりますin-c (言い換えることができるように、閉じる前にコメントしてください)

私が探している解決策は、いくつかの stl アルゴリズムとイテレータ操作を使用する必要があります。ブーストも良好です。

4

3 に答える 3

0

2 つのデータ構造をインターリーブする STL アルゴリズムはありません。ただし、反復子ベースのソリューションが必要な場合は、次のようにすることができます。

auto pIt = p.begin(), qIt = q.begin();
bool even = false;
while(pIt != p.end() && qIt != q.end()) {
  auto nextElement = (even = !even) ? pIt : qIt;
  pq.push_back(*nextElement);
  ++pIt;
  ++qIt;
}

これには、各ベクトルの最初のn 個の要素をインターリーブするという利点があります。ここで、 nは小さい方のベクトルのサイズです。

于 2013-04-21T07:19:48.730 に答える