可以使用整数索引访问向量元素吗?

men*_*342 3 c++

我有一些整数变量和一个向量。我需要使用整数变量作为向量中的索引。

简单地说可以some_vector[some_integer]吗?

或者我是否需要以某种方式将整数转换为大小类型?

apa*_*ara 5

是的,将被转换为size_t没有任何警告或错误。但要注意负值。如果您的int i值为负,则转换将产生std::numeric_limits<size_t>::max() + 1 - abs(i),通常是一个非常大的数字,这可能会导致不良后果。因此,如果索引可以为负,请在索引之前检查它。

UPD:严格来说,根据您的编译器标志,可能会出现警告。在 g++ 的情况下,这里有两个相关的:

  1. -Wconversion警告可能会改变值的转换。在整数转换中,当目标类型小于源类型(例如int32_t y = 1000; int16_t x = y;)时,可能会发生这种情况。
  2. 目标是无符号的(例如int16_t y = -1; uint32_t x = y;)或目标与源的大小相同(例如)的有符号-无符号转换unsigned int y = UINT_MAX; int x = y;也可能会更改该值,并且在 C 中-Wconversion确实会发出警告,但在 C++ 中,您需要添加-Wsign-conversion以使其出现。

我怀疑他们在 C++ 中做出了区分,正是因为人们通常索引std::vectorusingint并且static_cast如果在这种情况下出现警告,则必须制作太多的s 才能消除警告。

Microsoft CL 通过警告 C4244 涵盖了第一种情况,由 /W3 或 /W4 打开,对于第二种情况,我找不到警告开关。如果有人知道,请在评论中告诉。

AFAIK,C++ 标准没有明确要求size_t大小等于或大于int. 但我不知道任何平台不是这种情况。所以从intto 的转换size_t属于第二类。

总结:最有可能,您将不会收到预警int,以size_t转换在C ++中,正如我前面所说的,除非你使用G ++与-Wsign-conversion开关。