c++ - v.size()-1 背后的逻辑?
问题描述
我正在学习 C++,书中说向量中的最后一个元素是 v[v.size()-1]。这背后的逻辑是什么?size-1 如何给我最后一个元素?它不会从最后一个元素中给我第二个吗?
谢谢
解决方案
这本书说向量中的最后一个元素是
v[v.size()-1]
这是真的,但只有当v.size() > 0
. 如果向量为空,则其大小为 0,但返回的值std::vector::size()
是std::vector::size_type
无符号整数类型(通常为std::size_t
),因此结果“环绕”成为“意外”巨大值(size_type
, 实际上)。
您还可以使用v.back()
, 其中std::vector::back()
“返回对容器中最后一个元素的引用。调用back
空容器会导致未定义的行为。”
这背后的逻辑是什么?
在 C++ 中,向量(和数组)索引从 0 开始,因此这v[0]
将返回对第一个元素的引用(如果存在)。通常,通过访问不存在的元素operator[]
是未定义的行为。
为了描绘它,让我们考虑一个大小为 5 的向量。
v[0] v[1] v[2] v[3] v[4] +-----+-----+-----+-----+-----+ - - | 1 | 2 | 3 | 4 | 5 | | +-----+-----+-----+-----+-----+ - - ^ ^ v.begin() v.end()
请注意,v.end()
迭代器正好指向v.begin() + v.size()
并且最后一个可访问的元素是之前的那个。
推荐阅读
- python - Python函数及操作
- aem - 在 Slightly 的条件元素中包装标记?
- c# - 从打开的 DataReader 中返回一个新对象 - 好不好?
- java - 在 Java 中使用 Hibernate 加入嵌入式 ID 列
- python - libvips / pyvips 访问多通道 tiff (OME-Tiff) 的一小部分
- python - 在函数 2 中使用函数 1 创建的 pandas 数据框?
- visual-studio-code - VSCode + 远程 WSL 某些功能不起作用
- python - 如何使用 python 从网站上抓取段落?
- java - 多态性实现对子字段的强制通用更改
- deep-learning - 连体网络的线性变换