c++ - 当需要访问容器时返回迭代器而不是底层容器本身

标签 c++ stl map iterator

在我的程序中有很多地方需要访问和修改 std::map 数据结构。现在我有一个名为 getMap() 的方法,它实际上返回对 std::map 的引用。我正在考虑将迭代器返回到 std::map 而不是映射本身以获得更好的封装和性能。就封装和性能而言,这样做是个好主意还是返回映射与返回迭代器一样好?

最佳答案

如果您真的只需要对 map 的引用,那么为什么要返回迭代器?

如果您需要指向 map 的特定部分,迭代器并不总是封装得很好(它们是常量吗?反向?随机访问..?您的调用例程可能希望免受此类细节的影响,并且裸迭代器不提供这种保护)。 boost::range 可能会提供更好的解决方案。

对于其他一些容器(例如 vector),如果另一个例程在使用之前修改了容器,迭代器将失效。根据程序的语义,您可能认为这会破坏封装。

关于c++ - 当需要访问容器时返回迭代器而不是底层容器本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8603166/

相关文章:

c++ - 为什么我不应该使用智能指针?

c++ - 位 vector 和位集

c++ - 从函数按值返回STL vector 的有效方法

具有类键和类值的 C++ STL 映射容器

c++ - 模板函数如何获取 int 或 char 的最大值

c++ - 在 C++ : copy or reference, 或中传递只读参数

c++ - Qt cpp - 将 QString 写入文本文件的简洁方法

c++ - g++4.9 错误允许 std::vector<C_type_array>

按名称访问的 Scala 元素集合

java - 如何检查 Map 中的键是否以给定的字符串值开头