如果我有一个对象向量(普通对象,而不是指针或引用),为什么我不能这样做?
Object* object;
object = vectorOfObjects.end();
Run Code Online (Sandbox Code Playgroud)
要么
object = &vectorOfObjects.end();
Run Code Online (Sandbox Code Playgroud)
要么
object = &(*vectorOfObjects.end());
Run Code Online (Sandbox Code Playgroud)
如果'对象'是参考,也是同样的问题.
jal*_*alf 13
它们是三个独立的错误:
object = vectorOfObjects.end();
Run Code Online (Sandbox Code Playgroud)
将无法工作,因为end()返回一个迭代器,并且object是一个指针.这些通常是不同的类型(向量可以使用原始指针作为迭代器,但并非所有实现都这样做.其他容器需要特殊的迭代器类型).
object = &vectorOfObjects.end();
Run Code Online (Sandbox Code Playgroud)
因为你获取返回的迭代器的地址不起作用.也就是说,你得到一个指向迭代器的指针,而不是指向一个迭代器的指针Object.
object = &(*vectorOfObjects.end());
Run Code Online (Sandbox Code Playgroud)
因为end迭代器没有指向有效元素,所以不起作用.它指出了序列结束的一个.所以,它不能被解除引用.您可以取消引用序列中的最后一个元素(可能是--vectorOfObjects.end()),但不能指向超过末尾的迭代器.
最后,潜在的问题/混淆可能是您认为迭代器可以转换为指针.一般来说,它不能.如果您的容器是一个向量,则可以保证元素是连续分配的,就像在数组中一样,因此指针将起作用.但是,对于a list,指向元素的指针是无用的.它没有给你任何方法来达到下一个元素.
因为.end()返回一个迭代器,而不是一个Object,它甚至不是向量的有效成员。
即使使用begin()返回有效对象的 ,您也需要以下内容:
正确的方法是:
std::vector<Object> vec;
std::vector<Object>::iterator it;
//....
it = vec.begin();
Object o = *it;
Run Code Online (Sandbox Code Playgroud)