首页 > 解决方案 > 如何使用 std::move 根据 C++ 中向量的内容移动元素?

问题描述

我想知道是否可以根据向量中的内容将元素移动到另一个向量。例如,我有一个三个向量。点数,Player1 和 Player1type。点向量中有整数,player1type 中有字符串,player1 应该有来自点向量的数字。


int main() {

    vector <int> points {1,2,3,4,5};
    vector <string> player1type {"Power1", "Steal", "Power2", "Steal", "Power1"};
    vector <int> player1 {1,1,1,1,1};

    move(points.begin(), points.end(), player1.begin());


return 0;
} 

正如您在上面的代码中所见,它只是通过替换 player1 中已有的元素来将点中的元素移动到 player1。如果 player1type 中没有任何 Steal 元素,我想要移动的元素。所以它会是这样的:

player1type = {"Power1", "Steal", "Power2" ,"Steal", "Power1"};

Player1 = {1,3,5};

我试图实现这一点,但我无法让它工作。

int main() {

    vector <int> points {1,2,3,4,5};
    vector <string> player1type {"Power1", "Steal", "Power2", "Steal", "Power1"};
    vector <int> player1 {1,1,1,1,1};

    if (!player1type.empty() && player1type[0] == "Power1") {


    move(points.begin(), points.end(), player1.begin());

    }

    else if (!player1type.empty() && player1type[0] == "Power2") {

        move(points.begin(), points.end(), player1.begin());

    }

    else {

        cout << "Can't apply this sorry" << endl;       

    }

return 0;

} 

这似乎不起作用,它所做的只是添加数字而不管语句如何。

标签: c++if-statementvector

解决方案


整个向量的移动元素使用points.begin(), points.end().

对于您的条件情况,您应该移动 ifplayer1type!="Steal"并相应地设置开始和结束移动点,您可以在循环中实现:

vector <int> points {1,2,3,4,5};
vector <string> player1type {"Power1", "Steal", "Power2", "Steal", "Power1"};
vector <int> player1 {1,1,1,1,1};

for(int i=0; i<5; ++i)
{  if (!player1type.empty() && player1type[i] != "Steal") 
   move(points.begin()+i, points.begin()+i+1, player1.begin()+i);
   else player1[i]=0;
}
for(auto i:player1)
cout<<i; // 1 0 3 0 5

推荐阅读