以防万一 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_t
,vector.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
installation - 如何通过 .msi 包修改 machine.config
.net - .NET : System. InvalidOperationException :
vbscript - 当我的 InstallShield 安装程序尝试运行我的 VBS 自定义操作时
sql-server - 从现有数据库生成 SQL DDL 和内容的工具
sql-server-2005 - 强制 SQL Server 列为特定值