Ease()对结构/对象内部的STL向量不起作用?

时间:2018-12-31 00:43:15

标签: c++ stl

我有一个包含STL向量的对象。我从大小为零的向量开始,然后使用push_back进行添加。因此,push_back可以正常工作。

在我的代码中,向量中的每个元素代表一个原子。因此,此STL向量位于其中的对象是“分子”。

当我尝试从分子中删除原子时,即从数组中删除一个元素时,erase()函数不起作用。其他方法也可以使用,例如size()clear()clear()会删除所有元素,但是这太过分了。 erase()正是我想要的,但是由于某些原因它不起作用。

这是我的代码的简化版本。但是,它确实代表了问题所在。


#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

class atomInfo 
{
/* real code has more variables and methods */
public:
    atomInfo () {} ;
};

class molInfo 
{
/* There is more than 1 atom per molecule */
/* real code has more variables and methods */
public:
    vector <atomInfo> atom;
    molInfo () {};
};

int main ()
{
    int i;
    molInfo mol;

    for( i=0; i<3 ; i++)
        mol.atom.push_back( atomInfo() );
    //mol.atom.clear() ; //Works fine
      mol.atom.erase(1) ; //does not work
}    

使用erase()时出现以下错误:

  

main.cpp:在函数‘int main()’中:main.cpp:39:21:错误:无匹配项   调用“ std :: vector :: erase(int)”的函数        mol.atom.erase(1);

1 个答案:

答案 0 :(得分:5)

您似乎以为std::vector::erase从容器的开头获取了一个索引。

由于the documentation所说的不是,您不清楚从何处获得这个想法。

这些功能可与迭代器一起使用。

幸运的是,使用向量,您可以通过向迭代器添加数字来获得所需的效果。

赞:

mol.atom.erase(mol.atom.begin() + 1);

上述文档实际上确实有一个示例。