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

c++ help passing a vector index to a function

本文关键字:索引 函数 向量 帮助 c++      更新时间:2023-10-16

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

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

我需要传递什么给函数来指定我想要删除哪个轮子?当一个轮子被移走时,它原来的位置还在,可以被另一个轮子填满。比如说这辆车有四个轮子…如果我想删除车轮矢量中的第二个索引,remove()的函数参数需要采取什么才能做到这一点?我应该先传入矢量,然后再传入具体的索引....吗如果是的话,语法是什么样的?

你可以通过一个整数来指定你想要删除的

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;
    }
}

您的问题对我来说并不完全清楚,但是要从向量中删除元素,给定索引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());

虽然我不确定是否要删除符合该标准的每个元素,或者只是第一个。如果你能在伪代码中显示你想要做的事情的逻辑,那将会很有帮助。