c++ - C++ 标准库中 `at()` 索引函数的真实用例?

标签 c++ collections standard-library

C++的容器vectordeque、...除了operator[index,还提供at(index)访问器功能] 来访问容器元素。

The difference between this member function and member operator function operator[] is that deque::at signals if the requested position is out of range by throwing an out_of_range exception.

我的代码中从来没有,也从来没有需要过这个函数,因为在我的 C++ 代码中访问可能超出范围的元素是没有意义的。始终编​​写代码以访问正确的索引(或在索引无法匹配的情况下产生有意义的错误/异常。)

我会对在生产代码中使用 at() 的真实示例(可能来自一些开源项目,因为这会添加一些上下文)感兴趣。

也许有人可以举一个使用 at() 有意义的算法问题的例子。

注意:我已经最近在一些单元测试代码中使用了它,在这些代码中添加索引检查代码被认为不值得麻烦,并且 at( ) 被认为是足够的信息+上下文,以防测试中断。

注意:关于 this answer by ildjarn - 我确实想就此展开讨论或评论战。我对“积极”的发现很感兴趣,即 具体的例子已被使用。谢谢。

最佳答案

好吧,当您不控制正在使用的索引时(例如,如果它是由您的代码的客户端传入的),您应该手动检查它是否在范围内,或者使用 at 获取报告的异常(您可以捕获并使用自己的错误报告通知调用者,或者简单地向上传播标准异常)。

换句话说,被调用函数有责任检查输入参数,但它是使用 if 语句显式执行此操作,还是使用 at 而不是 [] 是一个有争议的问题。如果我要做的只是抛出一个 out_of_range 异常(如果传入的索引大于或等于集合的大小),我想我会让 这样做并为自己节省一些编码。

静默传回不良数据几乎从来都不是最佳解决方案。简单地将 x[7] 传回四元素整数甲板的问题在于调用者认为它是一个有效的零。 不是这种情况。

关于c++ - C++ 标准库中 `at()` 索引函数的真实用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5645730/

相关文章:

java - 尝试使用 ArrayList 创建矩阵?

c++ - C++ 的标准映射插入语义的基本原理?

haskell - 将 Maybes 映射到 monad 的函数

c++ - OpenCV Mat 数据成员访问

c++ - 如何在多个条件下分支/切换?

c++ - Boost:如何从现有属性树中获取子树?

javascript - 将新数据添加到 Backbone.js 中的集合

java - 我应该返回集合还是流?

c++ - 如何在 C++ 中处理按键事件

c++ - std::decay 和 std::remove_reference 之间的区别