Push элемент в векторе STL, но не найден при использовании 'at' - PullRequest
0 голосов
/ 24 апреля 2019

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

class Obj
{
    ...
private:
    std::vector<unsigned int> elements;
}

void Obj::addElement(unsigned int elt)
{
    elements.push_back(elt);
    printElements();
}

void Obj::removeElement(unsigned int elt)
{
    try
    {
        printElements();
        elements.at(elt);
    }
    catch (const exception& ex)
    {
        cout << "NOT FOUND" << endl;
        return;
    }
    elements.erase(std::remove(elements.begin(), elements.end(), elt, elements.end());
}       

void Obj::printElements()
{
    for(vector<unsigned int>::iterator i = elements.begin(); i != elements.end();++i)
    {
        cout << *i << endl;
    }
}

Передача 5 скажем ... obj.addElement (5);obj.removeElement (5);

printElements всегда печатает то, что вы ожидаете.Но в removeElement всегда генерируется исключение, и 5 никогда не удаляется.

Не уверен, почему это простое использование не сработает.

1 Ответ

1 голос
/ 24 апреля 2019

«At» ожидает получить позицию элемента, а не его фактическое значение.

https://en.cppreference.com/w/cpp/container/array/at

...