c++ - 是不是 vector.at(vector.size()-1) 比 vector.back

以防万一 vector 为空,(意外,异常(exception)情况)

cppreference 在 vector::back() 上说:

Calling back on an empty container causes undefined behavior.

但是在 vector::at :

If pos is not within the range of the container, an exception of type std::out_of_range is thrown.

所以如果容器是空的,如果 back() 是 UB被使用了,但是std::out_of_range如果 at() 被抛出被使用了。

那么,用vector.at(vector.size()-1)不是更好吗?而不是 vector.back()以防它是空的?

(由于 vector.size() 将返回未签名的 size_tvector.size()-1 将是一些类似于 18446744073709551615 的数字,所以严格来说,vector.at(static_cast<int>(vector.size())-1) 可能会更好。)

最佳答案

“更好” 视情况而定。

back()当您知道 vector 时存在这些情况是“not v.empty()”。在这些情况下,使用 at()只是在浪费资源。这是一个很常见的情况。

at()另一方面,当您不知道或不关心提供的索引是否在范围内时,这可能很有用。您可能已经安装了一个异常处理程序,以便让其处理索引超出范围的异常事件。

关于c++ - 是不是 vector.at(vector.size()-1) 比 vector.back() 更好,以防它是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75336303/

相关文章:

pdf - PDF 的 BitsPerComponent 如何转换为图像的每像素位数?

python - 查找给定范围内的数字,使给定列表中任何元素的数字的 gcd 始终为 1

python - sys.getrefcount 继续

installation - 如何通过 .msi 包修改 machine.config

.net - .NET : System. InvalidOperationException :

vbscript - 当我的 InstallShield 安装程序尝试运行我的 VBS 自定义操作时

sql-server - 从现有数据库生成 SQL DDL 和内容的工具

sql-server-2005 - 强制 SQL Server 列为特定值

c++-cli - 如何将 System::IntPtr 转换为 char*

wpf - ListBox 中的 TextBox、Button 和 ListBox