向量索引是否不会在C ++中环绕?解决方法是什么?

时间:2019-02-17 20:29:18

标签: c++ vector indexing

初始化向量时:

std::vector <int> someVec;

然后我打电话给

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

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

有什么办法可以解决这个问题?无法在C ++中执行此操作使我的“排序”功能混乱。有什么方法可以不同的方式初始化向量,以返回向量中的最后一个元素,而不是默认的0。似乎任何在向量范围之外的索引都将得到0。它没有被包裹,这使我感到困惑。

2 个答案:

答案 0 :(得分:2)

访问向量超出范围(例如在索引[-1]处)的行为是不确定的。

  

反正有[...]返回向量中的最后一个元素

像这样:someVec.back()

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

  

无法在C ++中执行此操作使我的“排序”功能混乱。

理想的方法可能是修复“排序”功能,使其不需要访问[-1]。标准库带有排序功能,因此您甚至不需要自己实现。

答案 1 :(得分:0)

  

有什么办法可以解决这个问题?

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

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

请注意,默认情况下初始化向量

std::vector<int> vec2;

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