c++ - 返回对迭代器的引用是一个好习惯吗? (这还有道理吗)?

标签 c++ visual-c++ stl objective-c++

我不确定这是否是合法的事情 - 通过引用返回迭代器:

  1. vector::iterator& getElement(const char* name) {...}

请注意,我的 vector 包含元素本身,而不是指针

在当前状态下,我已按值保留它(不带 &)。

关于迭代器是否达成共识,或者我可以同时使用这两种方式吗?

最佳答案

这有什么意义呢?迭代器本身就是一种对 vector 内部某些内容的引用。您是否希望为某人提供一个您可以在内部修改的迭代器?也就是说,分发对迭代器本身的引用的类会递增它——将其指向 vector 中的另一个事物——并且客户端以某种方式使其迭代器指向正确的事物,因为它之前调用了 getElement() ?这是我能想到的唯一对迭代器引用的应用,而且它的味道也确实很糟糕。

但更重要的是,暴露迭代器并因此可能持久存在严重问题。迭代器变得无效。如果您有一个指向界面内部某些内容的迭代器,并且某些内容删除或添加到 vector 中,则您将无法保证客户端的迭代器仍然有效。然后客户端访问它们的无效迭代器并发生未定义的行为——即崩溃。

关于c++ - 返回对迭代器的引用是一个好习惯吗? (这还有道理吗)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7435608/

相关文章:

c++ - 在 Direct3D 11 中绘制具有不同数量基元的对象

string - Visual Studio 资源编译器字符串合并

visual-c++ - 如何检测 MFC 应用程序中的箭头键?

c++ - 释放 STL vector 中的对象

c++ - "Proper"用 C++/STL 存储二进制数据的方式

c++ - 嵌入式STL智能指针

c++ - 枚举作为 C++ 中函数的返回类型

c++ - 访问类内的二维数组时出错

c++ - std::bitset::at() 在 VS2015 中消失

c++ - qmake:处理 gcc 和 msvc 的选项