【发布时间】:2015-05-28 15:24:27
【问题描述】:
这个问题与 Effective stl book 的第 16 项有关,该书指出,在旧代码中使用向量(假设vector<int>vec)而不是数组时,我们必须使用 &vec[0] 而不是 vec.begin() :
void doSomething(const int* pInts, size_t numlnts);
dosomething(&vec[0],vec.size()); \\correct!!
dosomething(vec.begin(),vec.size()); \\ wrong!! why???
这本书指出 vec.begin() 与 &vec[0] 不同。为什么 ?两者有什么区别?
【问题讨论】:
-
vector::begin() 产生一个迭代器, &vec[0] 产生一个指针。不是一回事。
-
但是迭代器是一个指针,不是吗?
-
指针是一种迭代器,但还有许多其他类型的迭代器不是指针。例如,虽然经常使用相同的术语,但通常说迭代器“指向”某个对象时引用您在取消引用迭代器时获得的对象。
-
@AyushChaurasia:没有。