Как переместить элементы, используя std :: move, углубляясь в содержимое вектора в C ++? - PullRequest
1 голос
/ 04 апреля 2020

Я хотел бы знать, могу ли я переместить элементы в другой вектор в зависимости от того, что есть в векторе. Так, например, у меня есть три вектора. Очки, Player1 и Player1type. Вектор точек содержит целые числа, тип player1 содержит строки, а элемент 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;

} 

Кажется, это не работает, все это добавляет это в числах независимо от заявлений.

1 Ответ

2 голосов
/ 04 апреля 2020

Ваши движущиеся элементы для всего вектора, используя points.begin(), points.end().

Для вашей условной ситуации вы должны двигаться, если player1type!="Steal", и соответственно настроить начальную и конечную точки перемещения, чего вы можете достичь в любом * 1007. *:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...