Вы передаете векторы по значению , поэтому вы действуете на копии векторов, а не на исходные векторы. Вместо этого вам нужно передать векторы по ссылке .
Кроме того, вы сказали, что хотите переместить элемент last , но на самом деле вы перемещаете первым вместо этого. И вы не удаляете элемент из старого вектора.
Кроме того, нет необходимости использовать std::move()
с необработанными указателями. Почему вы вообще используете ball*
? Вместо этого вы должны использовать std::unique_ptr<ball>
.
Попробуйте что-то вроде этого:
void move(std::vector<ball*> &ball_box, std::vector<ball*> &n_ball_box)
{
ball* b = ball_box.back();
ball_box.pop_back();
n_ball_box.push_back(b);
}
Если вы действительно хотите переместить элемент first , он будет выглядеть вот так:
void move(std::vector<ball*> &ball_box, std::vector<ball*> &n_ball_box)
{
ball* b = ball_box.front();
ball_box.erase(ball_box.begin());
n_ball_box.push_back(b);
}
Тем не менее, если вы переключитесь на std::unique_ptr<ball>
, то это будет выглядеть примерно так:
using ball_ptr = std::unique_ptr<ball>;
void move(std::vector<ball_ptr> &ball_box, std::vector<ball_ptr> &n_ball_box)
{
ball_ptr b = std::move(ball_box.back());
ball_box.pop_back();
/* or:
ball_ptr b = std::move(ball_box.front());
ball_box.erase(ball_box.begin());
*/
n_ball_box.push_back(std::move(b));
}
std::vector<ball_ptr> old_balls;
std::vector<ball_ptr> new_balls;
...
move(old_balls, new_balls);