erase() does not work on a STL vector inside a structure/object?
本问题已经有最佳答案,请猛点这里访问。
我有一个包含STL向量的对象。我从向量的大小为零开始,使用
在我的代码中,向量中的每个元素表示一个原子。因此,这个stl矢量所在的物体是一个"分子"。
当我试图从分子中除去一个原子,即从阵列中除去一个元素时,
这是我的代码的一个非常简化的版本。然而,它确实准确地代表了这个问题。
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 } |
使用
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) ;
您似乎认为
不清楚你是从哪里得到这个想法的,因为这不是文件上说的。
这些函数与迭代器一起工作。
幸运的是,使用向量,您可以通过向迭代器添加一个数字来获得想要的效果。
这样地:
1 | mol.atom.erase(mol.atom.begin() + 1); |
事实上,上述文件确实有这样一个例子。