【问题标题】:Push element in STL vector but not found when using 'at'推入 STL 向量中的元素,但在使用“at”时未找到
【发布时间】:2019-04-24 14:47:17
【问题描述】:

我正在尝试做一些非常简单的事情,将一个整数添加到一个向量并删除它。但是当我使用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 永远不会被删除。

不知道为什么这种简单的用法不起作用。

【问题讨论】:

  • at 想要一个索引。

标签: vector stl c++98


【解决方案1】:

“At”期望接收元素的位置,而不是它的实际值。

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

【讨论】:

  • 这发生在我们最好的人身上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2011-04-22
相关资源
最近更新 更多