组合两个不同大小的矢量的值

时间:2013-05-20 19:08:11

标签: c++ c++11

我只是想知道是否有更可读的方法来组合两个向量的值?

#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

2 个答案:

答案 0 :(得分: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>());
}

这是live example

答案 1 :(得分:2)

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