c++ - 使用 "at"或 [] 安全地访问 std::vector 的成员

标签 c++ arrays vector

我有一个数组

arr[10]

它试图访问

arr[12]

直到我意识到当我切换到 vector 时,程序才做任何事情。我在某处读到如果我使用 [] 那么程序将不会再次给出任何运行时错误,所以我应该使用 std::vectorat。但在我的程序中,我只是使用了 [],它帮助我发现了问题。看起来 [] 就足够了。我对吗?另外,为了安全,数组有没有绑定(bind)检查?

最佳答案

C++ 库的某些实现具有 Debug模式,即使您使用 [] 语法也会抛出异常,但这不是标准指定的。所以这可能就是你所经历的。如果您想确保应该使用 at()

C++ 没有对原始数组进行边界检查,但是如果你的编译器支持最新版本的 C++,那么你可以使用 std::array 而不是原始数组,并且这个容器有一个 at() 方法就像 std::vector

我建议使用 std::array,即使您不想要此功能也是如此,因为原始数组还有一些其他问题(例如,它们会衰减为指针)。 std::array 的行为更加一致(例如,您可以将它们按值传递给函数或返回它们,它们将正常工作,而编写明显的语法以按值传递数组将失败,取而代之的是只需传递一个指针)。

帮自己一个忙,永远不要使用原始数组。

关于c++ - 使用 "at"或 [] 安全地访问 std::vector 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8777313/

相关文章:

vector - Clojure 问题 'contains'

arrays - xPages 以作用域变量作为数据源重复控制

C++ istream : Is gcount() always set after a read() even if it fails?

c++ - 在没有默认构造函数的情况下将对象实例化为类成员

c++ - 带有 Protocol Buffer 的 GzipOutputStream 和 GzipInputStream 的简单工作示例

java - Hibernate IN/ANY 与 Criteria 中的自定义转换器

javascript - 如何根据键过滤 JSON,因此我只有所有对象的一种类型键的列表

c++ - 在包含正整数和负整数的 vector 中找到最小的缺失整数?

c++ - 在 vector 中搜索对象的任何实例时出错

c++ - 将重载+成员函数的结果发送给重载<<导致编译错误