我理解(至少我认为我这样做)指针可以用作随机STL迭代器.
除非我将指针强制转换为迭代器,否则为什么以下代码无法编译?
vector<int> v{1, 2, 3};
v.erase(&v[0]);
Run Code Online (Sandbox Code Playgroud)
Pau*_*ulR 12
你可以通过指针算法类似std::sort,std::find或std::copy.这些模板可以配置为适当的迭代器.
这并不意味着不同的迭代器必然会相互转换.
该方法erase的的std::vector<int>容器只能与迭代器工作,以相同的矢量的元素.正如已经指出的那样,这可以实现为指针,但通常不是这样,原因如下:
C++ std :: vector <> :: iterator不是指针,为什么?
考虑std::find:
template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );
Run Code Online (Sandbox Code Playgroud)
这InputIt是一个模板参数.该模板std::find将适用于满足输入迭代器要求的任何迭代器类型,并且其operator*返回值可以与类型进行比较T.指针在这里工作得很好.火蓝瑟在评论正确地指出,无论是first和last类型必须为InputIt.
现在将它与std :: vector :: erase进行比较:
iterator erase( const_iterator pos );
Run Code Online (Sandbox Code Playgroud)
这需要a const_iterator,这是std::vector类的typedef之一.这是一种特殊类型的迭代器,而不是模板参数.