简体   繁体   English

我可以为数组的所有成员添加一个值吗

[英]Can I add a value to all members of an Array

Is there an algorithm in STL that can add at once the same value to all the members of an array? STL 中是否有一种算法可以一次向数组的所有成员添加相同的值?

For example:例如:

KnightMoves moveKnight(int currentPossition_x, int currentPossition_y)
{
    array<int , 8> possibleMoves_x = { -2 , -2 , -1 , -1 ,  1 , 1 , 2 ,  2 };
    array<int , 8> possibleMoves_y = { -1 ,  1 , -2 ,  2 , -2 , 2 , -1 , 1 };

    for (auto it = possibleMoves_x.begin(); it != possibleMoves_x.end(); it++)
    {
        array <int, 8> newTempKnightPoss_x = currentPossition_x + possibleMoves_x;

        array <int, 8> newTempKnightPoss_y = currentPossition_y + possibleMoves_x;
    }

}

I could do something like this but i was hopping there is a better solution我可以做这样的事情,但我希望有更好的解决方案

KnightMoves moveKnight(int currentPossition_x, int currentPossition_y)
{
   array<int , 8> possibleMoves_x = { -2 , -2 , -1 , -1 ,  1 , 1 , 2 ,  2 };
   array<int , 8> possibleMoves_y = { -1 ,  1 , -2 ,  2 , -2 , 2 , -1 , 1 };

   for (auto it = possibleMoves_x.begin(); it != possibleMoves_x.end(); it++)
   {
       *it = *it  +currentPossition_x;

   }
   for (auto it = possibleMoves_y.begin(); it != possibleMoves_y.end(); it++)
   {
       *it = *it + currentPossition_y;

   }
}

The axpepted results are 2 arrays which each element is the element plus a constant value; axpepted 的结果是 2 个数组,其中每个元素是元素加上一个常量值;

If you have C++11 you can use the range-based-for loop:如果你有 C++11,你可以使用基于范围的 for循环:

KnightMoves moveKnight(int currentPossition_x, int currentPossition_y){
    array<int , 8> possibleMoves_x = { -2 , -2 , -1 , -1 ,  1 , 1 , 2 ,  2 };
    array<int , 8> possibleMoves_y = { -1 ,  1 , -2 ,  2 , -2 , 2 , -1 , 1 };

    for(auto& i : possibleMoves_x){ i += currentPossition_x; }
    for(auto& i : possibleMoves_y){ i += currentPossition_y; }
}

Before C++11 you can use std::for_each :在 C++11 之前,您可以使用std::for_each

struct adder{
    adder(int val): v{val}{}
    void operator()(int& n) { n += v; }
    int v;
};

KnightMoves moveKnight(int currentPossition_x, int currentPossition_y){
    array<int , 8> possibleMoves_x = { -2 , -2 , -1 , -1 ,  1 , 1 , 2 ,  2 };
    array<int , 8> possibleMoves_y = { -1 ,  1 , -2 ,  2 , -2 , 2 , -1 , 1 };

    std::for_each(possibleMoves_x.begin(), possibleMoves_x.end(), 
                  adder(currentPossition_x));
    std::for_each(possibleMoves_y.begin(), possibleMoves_y.end(),
                  adder(currentPossition_x));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM