返回的迭代器
Returning Iterators
使用map.find((或任何返回迭代器的功能。将返回的值存储为参考是否有任何好处?
const auto it = map.find(0);
const auto& it2 = map.find(0);
const auto&
如果您在范围内使用 for
循环,您也可以确定寿命:
for(const auto& it : map)
{....}
正如@Ted所指出的,这种形式的for
循环
for(const auto& [key, value] : the_map)
{ ... }
否则,微型临时(如果有的话(不值得它带来的潜在错误。也许有一天,另一个程序员删除了const
,然后您有一个临时的引用。
有两个瞬间使此方法无用:
-
迭代器设计为轻巧的物体,可廉价地通过价值通过和存储。
-
即使在这种情况下您会有重对象,也不会保存任何东西。这就是原因。
想象此代码:
HeavyObject foobar();
auto obj1 = foobar();
const auto &obj2 = foobar();
在C 的幼年中,第二种情况可能会更加最佳,因为第一个情况可能会在第一个情况下进行复制CTOR。由于RVO(返回值优化(,因此不再是这种情况,这是C 17以来的强制性。因此,与迭代器相比,您的代码曾经对更复杂的对象有意义。如果迭代器,即使不启用了优化,您也不会看到性能的任何差异,即使不要求RVO。因此,某些人认为这样的代码可以认为是不错的,但是我发现它不可读,因为迭代器通常按价值传递,至少会提出一个问题,为什么作者这样做?
相关文章:
- 使用 map<char,strring> 的迭代器返回指针 map<char,strring>*
- 如何从高性能的输入迭代器返回变体?
- 如何为迭代器返回"null"值?
- 将迭代器返回到向量的函数
- 迭代器返回 vector::begin()
- 访问对向量以使用迭代器返回
- 获取迭代器返回的字符串的大小()
- 如何让Lua迭代器返回C结构
- 迭代器返回最后一个元素上的"Junk"
- 指向矢量迭代器返回值的指针
- 使用迭代器返回对字符串的引用
- 如何将指针作为迭代器返回
- 将迭代器返回到多映射中最接近指定时间的时间
- 通过迭代器返回set对象的地址
- 从迭代器返回一个std::list元素的引用
- 为我的向量包装器和迭代器返回'begin'和'end'函数返回什么?
- c++迭代器返回类型
- 从取消引用的迭代器返回 std::map<std::string, int> 时出现巨大的内存泄漏
- 迭代器返回垃圾
- 通过不使用模板的迭代器返回std::list