删除向量STL中最后一次出现的元素

时间:2016-03-06 03:02:01

标签: c++ c++11 vector stl

如何只删除C ++向量中最后一次出现的值?

我有这样的代码。

if(vect.erase(std::remove(vect.begin(), vect.end(), oldVal),vect.end()) == vect.end()){
                cont++;                     
            }                               
            vect.push_back(newVal);

它会删除数组中值的所有实例。我需要它只删除向量中的最后一个特定元素。

实施例 矢量:1 3 4 5 3 5 3 8 3 6

结束我想删除'3'然后应该得到:

1 3 4 5 3 5 3 8 6

是否有任何规范解决方案或我应该尝试堆栈操作系统列表?

1 个答案:

答案 0 :(得分:4)

  1. std::find会找到一个元素
  2. myVector.rbegin()访问的
  3. std::reverse_iterator允许您从后面搜索。
  4. erase()如上所述。
  5. 类似的东西:

    auto foundIt = std::find(vect.rbegin(), vect.rend(), oldVal);
    // Find first from the back, i.e. last
    if (foundIt != vect.rend()) { // if it was found
        // get back to the right iterator
        auto toRemove = --(foundIt.base());
        // and erase it
        vect.erase(toRemove);
    }