0

したがって、私のクラスの 1 つに次のオーバーロードがあります。

DVector &operator+=(DVector const &other) {
    if (vector.size() >= other.vector.size()) throw up; // lol.

    std::for_each(other.vector.begin(); other.vector.end(), [](DVector const &pass) {
        // huh?
    });
}

したがって、アイデアは、両方のベクトルのすべてのメンバーを合計することです (うーん、すべてのDVectorインスタンスにはstd::vector<float>と呼ばれるメンバーが含まれていますvector)。たとえば、次のようになります。

次のフロートを含むメンバーを含むDVectorものと、を含む別のものがある場合、両方の合計が最初のベクトル保持につながるはずです。vector11.0, 23.5, 12.314.0, 6.5, 7.725.0, 25.0, 25.0

質問: ベクトルのサイズが問題にならないと仮定して、両方のベクトルをループし、1 つのイテレータのみを使用してそれらのメンバーを合計する方法はありfor (auto x: vector.size())ますか?

乾杯、ジュリアン。

4

3 に答える 3

3

これは、2 つの入力と出力反復子を受け取る std::transfom アルゴリズムです。

特定のベクターデザインがどのように構築されているかはわかりませんが、必要に応じて以下を変更できるはずです。

 std::transform(input1.begin(), input1.end(),  //input1
                intput2.begin(),               //input2
                input1.begin(),                //output 
     [](double a, double b){
          return a+b;
     });

また、別の出力イテレータを使用することoperator +もできます。

ここにいくつかの参照があります

http://en.cppreference.com/w/cpp/algorithm/transform

http://www.cplusplus.com/reference/algorithm/transform/

そして、異なる出力がある場合は、 back_inserter があなたの友達です:

http://en.cppreference.com/w/cpp/iterator/back_inserter

于 2012-04-16T15:22:49.833 に答える
2

イテレーターはコンテナーに関連付けられているため、単一のイテレーターを使用することはできません。インデックスまたは 2 つの個別の反復子を使用する必要があります。

于 2012-04-16T15:20:49.517 に答える
2

あなたのニーズを正しく理解している場合:

std::transform(vec1.begin(), vec1.end(), vec2.begin(), vec1.begin(),
    [](float lhs, float rhs) {
        return lhs + rhs;
    });
于 2012-04-16T15:22:08.070 に答える