关于c ++:erase()不适用于结构/对象内的STL向量?

erase() does not work on a STL vector inside a structure/object?

本问题已经有最佳答案,请猛点这里访问。

我有一个包含STL向量的对象。我从向量的大小为零开始,使用push_back将其相加。所以,push_back工作得很好。

在我的代码中,向量中的每个元素表示一个原子。因此,这个stl矢量所在的物体是一个"分子"。

当我试图从分子中除去一个原子,即从阵列中除去一个元素时,erase()功能不起作用。其他方法也有作用,如size()clear()。但是,clear()删除了所有元素,这是一种过度杀伤力。erase()正是我想要的,但由于某种原因它不起作用。

这是我的代码的一个非常简化的版本。然而,它确实准确地代表了这个问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <vector>
#include <string>
#include

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  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: In function ‘int main()’: main.cpp:39:21: error: no matching
function for call to ‘std::vector::erase(int)’
mol.atom.erase(1) ;


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

不清楚你是从哪里得到这个想法的,因为这不是文件上说的。

这些函数与迭代器一起工作。

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

这样地:

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

事实上,上述文件确实有这样一个例子。