C ++ поможет передать векторный индекс в функцию - PullRequest
0 голосов
/ 18 апреля 2011

Я знаю, как передать вектор в функцию, но как передать индекс вектора в функцию или, по крайней мере, указать, какой индекс модифицирует функция.Например, я работаю над классом автомобилей, и у него есть вектор, если указатели колес, и чтобы удалить одно из колес, моя функция выглядит следующим образом:

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

что мне нужно передатьфункция для того, чтобы указать, какое колесо я хочу удалить?Когда колесо снято, положение, в котором оно было, все еще там и может быть заполнено другим колесом.Скажем, например, что у машины было 4 колеса ... если я хотел удалить 2-й индекс в векторе колес, что нужно для этого сделать аргумент функции для remove ()?Должен ли я передать вектор, а затем конкретный индекс .... и если да, то как выглядит синтаксис?

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Ваш вопрос мне не совсем понятен, но для удаления элемента из вектора, с учетом индекса 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());

Хотя я не уверен, хотите ли вы удалить каждый элемент, который соответствует этим критериям, или только первый. Если бы вы указали в псевдокоде логику того, что вы хотите сделать, это помогло бы.

1 голос
/ 18 апреля 2011

Вы можете просто передать целое число, чтобы указать, какое из них вы хотите удалить

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...