我有一个包含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);
答案 0 :(得分:5)
您似乎以为std::vector::erase
从容器的开头获取了一个索引。
由于the documentation所说的不是,您不清楚从何处获得这个想法。
这些功能可与迭代器一起使用。
幸运的是,使用向量,您可以通过向迭代器添加数字来获得所需的效果。
赞:
mol.atom.erase(mol.atom.begin() + 1);
上述文档实际上确实有一个示例。