向量索引在C 中不会包裹吗?什么是解决方法



初始化向量时:

std::vector <int> someVec;

我打电话:

std::cout << someVec[-1];

有任意数量的元素,始终返回0。

有什么办法可以解决这个问题吗?在C 中无法执行此操作正在弄乱我的"排序"功能。是否有任何方法可以以不同的方式初始化上述向量,以返回向量中的最后一个元素,而不是0似乎是默认值。看来任何索引在向量范围之外的任何索引都将导致0。没有包装使我感到困惑。

访问边界外访问向量的行为(例如在索引[-1])是未定义的。

无论如何[...]返回向量中的最后一个元素

这样:someVec.back()

如果使用索引[-1]时需要返回最后一个元素的容器,则向量不是用于您的目的的容器。标准库没有这样的容器。

无法在C 中执行此操作正在弄乱我的"排序"函数。

理想的方法可能是修复"排序"功能以不需要访问[-1]。但是,标准库带有一个排序功能,因此您甚至不需要自己实施一个功能。

有其他方法可以解决这个问题吗?

要访问std::vector中的最后一个元素,请使用std::back

std::vector<int> vec(10,1);
std::cout << vec.back();    // prints 1

请注意,默认初始化向量

std::vector<int> vec2;

通过operator[]访问任何索引是未定义的行为,因为向量的大小为 0,没有任何元素可以访问。

最新更新