我正在尝试将向量old_balls
的最后一个元素移动到新向量new_balls
。
但是当我调用该函数时,它不会将元素移动到新的向量。
我认为我正确使用了移动功能。
std::vector<ball*> old_balls;
std::vector<ball*> new_balls;
void move(std::vector <ball*> ball_box, std::vector <ball*> n_ball_box ){
new_ball_.push_back(std::move(ball_box[0]));
}
//function call
move(old_balls, new_balls);
您正在传递矢量按值,因此您正在对矢量的副本进行操作,而不是对原始矢量进行操作。您需要传递矢量by reference。
此外,也不需要将std::move()
与原始指针一起使用(为什么要使用ball*
而不是std::unique_ptr<ball>
?]。
而且,您说过想移动last元素,但实际上是在移动first元素。而且您不会从旧向量中删除元素。
尝试其他类似方法:
void move(std::vector<ball*> &ball_box, std::vector<ball*> &n_ball_box ){
ball* b = ball_box.back();
ball_box.pop_back();
new_ball_.push_back(b);
}
//function call
std::vector<ball*> old_balls;
std::vector<ball*> new_balls;
...
move(old_balls, new_balls);