我不确定这是否是合法的事情 - 通过引用返回迭代器:
- vector::iterator& getElement(const char* name) {...}
请注意,我的 vector 包含元素本身,而不是指针。
在当前状态下,我已按值保留它(不带 &)。
关于迭代器是否达成共识,或者我可以同时使用这两种方式吗?
最佳答案
这有什么意义呢?迭代器本身就是一种对 vector 内部某些内容的引用。您是否希望为某人提供一个您可以在内部修改的迭代器?也就是说,分发对迭代器本身的引用的类会递增它——将其指向 vector 中的另一个事物——并且客户端以某种方式使其迭代器指向正确的事物,因为它之前调用了 getElement() ?这是我能想到的唯一对迭代器引用的应用,而且它的味道也确实很糟糕。
但更重要的是,暴露迭代器并因此可能持久存在严重问题。迭代器变得无效。如果您有一个指向界面内部某些内容的迭代器,并且某些内容删除或添加到 vector 中,则您将无法保证客户端的迭代器仍然有效。然后客户端访问它们的无效迭代器并发生未定义的行为——即崩溃。
关于c++ - 返回对迭代器的引用是一个好习惯吗? (这还有道理吗)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7435608/