如果我有一个对象 vector (普通对象,不是指针或引用),为什么我不能这样做?
Object* object;
object = vectorOfObjects.end();
或
object = &vectorOfObjects.end();
或
object = &(*vectorOfObjects.end());
如果“对象”是引用,也是同样的问题。
最佳答案
它们是三个独立的错误:
object = vectorOfObjects.end();
不会工作,因为 end()
返回一个迭代器,而 object
是一个指针。这些通常是不同的类型( vector 可以使用原始指针作为迭代器,但并非所有实现都这样做。其他容器需要特殊的迭代器类型)。
object = &vectorOfObjects.end();
不起作用,因为您获取了返回的迭代器的地址。也就是说,您得到一个指向迭代器的指针,而不是一个指向 Object
的指针。
object = &(*vectorOfObjects.end());
不起作用,因为 end
迭代器未指向有效元素。它指向序列末尾的一个。因此,它不能被取消引用。您可以取消引用序列中的最后一个元素(即 --vectorOfObjects.end()
),但不能取消引用指向过去结尾的迭代器。
最后,潜在的问题/困惑可能是您认为迭代器可以转换为指针。一般来说,不能。如果您的容器是 vector ,则可以保证元素是连续分配的,就像在数组中一样,因此指针将起作用。但是对于 list
来说,指向元素的指针是无用的。它不会为您提供到达下一个 元素的任何方式。
关于c++ - 为什么我不能取消引用迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9141123/