无法将迭代器传递给接受指针的函数

asi*_*ir6 3 c++

在"Effective STL"提示16中,它表示我们应该避免将迭代器传递给接受指针的函数.有人可以帮我解释一下细节吗?

void doSomething(const int* pInts, size_t numInts);
vector<int> v;
...
doSomething(&v[0],v.size()) //correct
doSomething(v.begin(),v.size()) //incorrect
Run Code Online (Sandbox Code Playgroud)

Che*_*Alf 11

在标准库的一些早期实现中,迭代器被实现为指针.

当迭代器变为非指针时,依赖于该属性的代码停止工作.

所以,你不应该传递一个预期指针的迭代器,因为如果它编译那么它只是偶然的机会.迭代器不一定是指针.如果它是一个指针,那么它可能不一定是某个更高版本(库,编译器等)的指针.

  • 不仅仅是因为不一致,指针没有`std ::`作为它们的关联命名空间. (2认同)