как вернуть индекс из функции? - PullRequest
0 голосов
/ 24 марта 2019

Я работаю над программой телефонной книги. Мне нужно использовать позицию, возвращаемую моей функцией findContact, и использовать ее в качестве индекса в моей функции deleteContact.

void AddressBook::deleteContact(std::string nameMatch) //need to implement find contact && not found if there is a space at end of name
{

    if (length == 0)
    {
        std::cout << "Phonebook is empty" << std::endl;
        return;
    }



    findContact(nameMatch);
    std::cout << phoneBook[position]->name << " deleted" << std::endl;
    phoneBook[position] = phoneBook[length - 1]; //how to use position
    length--;

    return;
}

Я использую бинарный поиск, потому что его инструктирует мой профессор.

int AddressBook::findContact(std::string nameMatch)
{
    int first = 0;
    int last = length - 1;
    int middle;
    int position = -1;
    bool found = false;

    while (!found && first <= last)
    {
            middle = (first + last) / 2;


            if (phoneBook[middle]->name == nameMatch)
            {
                found = true;
                position = middle;
            }

            else if (phoneBook[middle]->name > nameMatch)
            {
                last = middle - 1;
            }
            else
            {
                first = middle + 1;
            }
        }

        return position;
    }

Это в основном неполно, но я пытаюсь понять, как использовать позицию

вернулся из моей функции findContact и использовал ее в моем deleteContact.

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Я не совсем уверен, что вы подразумеваете под как использовать позицию .Если ваша проблема заключается в том, как технически вы получаете позицию из вашего метода поиска в ваш метод удаления, ответ @ DeviationN - это ваше решение.

Но вы, возможно, спрашиваете как сделать удаление в вашем контейнере телефонной книги (это, вероятно, вектор?).Что вы сделали, так это перезаписали вашу запись, которая будет удалена последней записью в вашей телефонной книге.Однако это нарушит порядок сортировки (в большинстве случаев).Но если вы используете бинарный поиск, это необходимое условие , что ваша телефонная книга отсортирована.

Вместо этого удалите свою запись в позиции через

phoneBook.erase( phonebook.cbegin() + position );

end либо уменьшите вашу длину, как вы, либо сбросьте ее как

length = phoneBook.size();

(Здесь я предположил, что phoneBook является std :: vector или std :: deque)

Edit : я только что заметил, что phoneBook является контейнером указателей, поэтому не забудьте сделать

delete phoneBook[ position ];

перед удалением этого элемента(если вы не используете умные указатели;).

0 голосов
/ 24 марта 2019

Сохранить возвращаемое значение в локальной переменной.

auto position = findContact(nameMatch);
...