c++ - 为什么不重载 std::vector::erase 以获取整数索引?

标签 c++ stl stdvector

<分区>

std::vector::erase 将接受表示要删除的元素位置的单个迭代器,或表示范围的两个迭代器。但是你不能这样做:

std::vector<int> vec = { 1, 2, 3 };
vec.erase(1);

相反,你必须做类似的事情

vec.erase( vec.begin()+1 );

这似乎是不必要的额外工作——只是想知道,类设计的 POV 是否有某些原因导致不包含此重载?

编辑:选择最全面的答案,都很好。另外,在我撰写本文时,这篇文章因“不具有建设性”而获得 4 票接近;但是,考虑到答案的质量,我认为这显然是一个有用的问题,当然对我而言。

最佳答案

我的理解是 STL 想要将索引和整数分开,因为它们不是一回事(从语义上讲):如果你想做算术,请使用整数,如果你想访问 STL 容器中的元素,请使用迭代器。它还服务于抽象:通常整数可以作为索引,有时它没有意义。

关于c++ - 为什么不重载 std::vector::erase 以获取整数索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466535/

相关文章:

c++ - cin.peek() 在 C++ 中如何工作?

c++ - 为什么无效的 C++ 映射声明在编译时不会失败?

c++ - 迭代 vector 的 vector

c++ - 可以使用 std::vector 元素的地址作为指针吗?

c++ - 使用 vector 对堆栈进行排序

c++ - GLSL 照明作为平面 - 法线问题?

c++ - Cython 包装 operator<< 来自多个命名空间

c++ - 使用 STL std::merge() 将 vector 的两个部分合并到另一个 vector 中

c++ - 为什么不能将两个 std::vector 迭代器相加?

c++ - C++:从vector <byte>的任何位置获取int