首页 > 解决方案 > v.size()-1 背后的逻辑?

问题描述

我正在学习 C++,书中说向量中的最后一个元素是 v[v.size()-1]。这背后的逻辑是什么?size-1 如何给我最后一个元素?它不会从最后一个元素中给我第二个吗?

谢谢

标签: c++

解决方案


这本书说向量中的最后一个元素是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()并且最后一个可访问的元素是之前的那个。


推荐阅读