0

我只是想知道是否有一种更易读的方式来组合两个向量的值?

#include <vector>
#include <iostream>

int main( int argc, char ** argv )
{
    std::vector<int> v1 = { 1, 2, 3, 7 };
    std::vector<int> v2 = { 1, 2, 3, 5, 19 };
    std::vector<int>::iterator v2it = v2.begin();

    if( v1.size() > v2.size() )
    {
        for( auto v1it = v1.begin(); v1it != v1.end(); ++v1it )
        {
            *v1it = *v1it + *v2it;
            std::cout << *v1it << std::endl;
            ++v2it;
        }
    }
    else
    {
        auto v1it = v1.begin();

        for( auto v2it = v2.begin(); v2it != v2.end(); ++v2it )
        {
            *v2it = *v2it + *v1it;
            std::cout << *v2it << std::endl;
            ++v1it;
        }
    }



    return 0;
}

上面的输出是:

2 4 6 12 19

4

2 回答 2

3

您可以使用std::transform(),它假定范围的长度相同。我将把它留给你作为练习,以了解如何处理不同长度范围的情况:

#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <functional>

int main()
{
    std::vector<int> v1 = { 1, 2, 3, 7 };
    std::vector<int> v2 = { 1, 2, 3, 5, 19 };

    std::transform(begin(v1), end(v1), begin(v2), 
                   std::ostream_iterator<int>(std::cout, " "), std::plus<int>());
}

这是一个活生生的例子

于 2013-05-20T19:15:12.370 回答
2

如果你想用向量做数学,你应该看看std::valarray

于 2013-05-20T19:15:52.113 回答