要从矢量中删除元素,我们可以使用
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的匹配函数"...
第二句只能在某些有限的环境中使用吗?
erase() 采用迭代器,而不是指针.
因为std::vector,指针是实现其迭代器的有效方式,因此第二种形式可以在使用指针作为迭代器的实现中进行编译.当然,这种用途完全不可移植.
现代实现通常为迭代器使用单独的类型,在这种情况下,第二个版本将不会编译.使用单独的类型允许更好的错误检查,无论是在编译时(例如,捕获std::string迭代器和s 的意外混淆std::vector<char>),还是在运行时(对于调试模式).
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |