我知道如何将向量传递给函数,但是如何将向量索引传递给函数,或者至少指定函数正在修改哪个索引。例如,我正在研究一个Car类,它有一个向量如果是指针,为了删除其中一个轮子,我的函数看起来像这样:
Wheel& remove() {
for (int i = 0; i < wheels.size(); i++) {
if (wheels[i].position == wheels.at(i)) {
??
}
我需要传递给函数以指定我想删除哪个轮子?拆下车轮时,车轮的位置仍在那里,可以用另一个车轮填充。比方说,例如汽车有4个车轮......如果我想要去掉车轮矢量中的第二个索引,remove()的函数参数需要采取什么来做呢?我应该传入向量然后传递特定的索引....如果是这样,语法是什么样的?
答案 0 :(得分:1)
您只需传递一个整数即可指定要删除的整数
void RemoveWheel(int i)
{
if( (i<wheels.size()) and (i>=0) )
wheels.erase(wheels.begin()+i);
}
http://www.cplusplus.com/reference/stl/vector/erase/
如果你想留下另一个轮子的空间,你应该将wheels
定义为指针向量,只需删除第i个位置的对象并保存NULL而不是它。
vector<Wheel *> wheels;
void RemoveWheel(int i)
{
if( (i<wheels.size()) and (i>=0) ) {
delete wheels[i];
wheels[i] = 0;
}
}
答案 1 :(得分:1)
我的问题并不完全清楚,但是如果从索引i中删除元素,则可以执行以下操作:
wheels.erase(wheels.begin() + i);
但这会更好:
auto e = std::remove_if(wheels.begin(), wheels.end(),
[](const Wheel & wheel) {
return wheel.position == wheel;
});
wheels.erase(e,wheels.end());
虽然我不确定您是否要删除符合该条件的所有元素,或仅删除第一个元素。如果您要以伪代码的形式显示您想要做的事情,那将有所帮助。