c ++帮助将向量索引传递给函数

时间:2011-04-18 18:31:16

标签: c++ pointers vector

我知道如何将向量传递给函数,但是如何将向量索引传递给函数,或者至少指定函数正在修改哪个索引。例如,我正在研究一个Car类,它有一个向量如果是指针,为了删除其中一个轮子,我的函数看起来像这样:

Wheel& remove() {
    for (int i = 0; i < wheels.size(); i++) {
        if (wheels[i].position == wheels.at(i)) {
            ??
        }

我需要传递给函数以指定我想删除哪个轮子?拆下车轮时,车轮的位置仍在那里,可以用另一个车轮填充。比方说,例如汽车有4个车轮......如果我想要去掉车轮矢量中的第二个索引,remove()的函数参数需要采取什么来做呢?我应该传入向量然后传递特定的索引....如果是这样,语法是什么样的?

2 个答案:

答案 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());

虽然我不确定您是否要删除符合该条件的所有元素,或仅删除第一个元素。如果您要以伪代码的形式显示您想要做的事情,那将有所帮助。