std :: vector> v.erase(&v [1]); 未找到

sev*_*ine -1 c++ vector

要从矢量中删除元素,我们可以使用

v.erase(v.begin() + 1); // remove 2nd 
Run Code Online (Sandbox Code Playgroud)

此外,我在本网站(SO)的一些帖子中找到了如下句子(例如这个).

v.erase(&v[1]); 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用第二句时,编译器说"错误:没有用于调用std :: vector的匹配函数"...

http://ideone.com/UZJaEK

第二句只能在某些有限的环境中使用吗?

T.C*_*.C. 5

erase() 采用迭代器,而不是指针.

因为std::vector,指针是实现其迭代器的有效方式,因此第二种形式可以在使用指针作为迭代器的实现中进行编译.当然,这种用途完全不可移植.

现代实现通常为迭代器使用单独的类型,在这种情况下,第二个版本将不会编译.使用单独的类型允许更好的错误检查,无论是在编译时(例如,捕获std::string迭代器和s 的意外混淆std::vector<char>),还是在运行时(对于调试模式).