可以使用整数索引访问向量元素吗?
Is it okay to access vector elements with an integer index?
我有一些整数变量和一个向量。我需要使用整数变量作为向量中的索引。
可以简单地说some_vector[some_integer]
吗?
还是我需要以某种方式将整数转换为大小类型?
是的,将在没有任何警告或错误的情况下转换为size_t
。但要注意负值。如果你的int i
是负数,转换将产生std::numeric_limits<size_t>::max() + 1 - abs(i)
,通常是一个非常大的数字,这可能会导致不良后果。因此,如果索引可能为负数,请在索引之前检查它。
上发:严格来说,可能会有警告,具体取决于编译器标志。在 g++ 的情况下,这里有两个相关的:
-Wconversion
警告可能会更改价值的转化。在整数转换中,当目标类型小于源类型时,可能会发生这种情况(例如int32_t y = 1000; int16_t x = y;
)。
目标为无符号的有符号- -无符号转化(例如
int16_t y = -1; uint32_t x = y;
) 或目标与源大小相同(例如unsigned int y = UINT_MAX; int x = y;
) 也可能更改该值,在 C 中-Wconversion
确实会发出警告,但在C++中您需要添加-Wsign-conversion
才能使其显示。
我怀疑他们在C++中做出区分正是因为人们通常在使用int
索引std::vector
,并且如果在这种情况下出现警告,则必须做太多static_cast
才能摆脱警告。
Microsoft CL 通过警告 C4244 覆盖第一种情况,由/W3 或/W4 打开,对于第二种情况,我找不到警告开关。如果有人知道,请在评论中告诉。
AFAIK,C++标准没有明确要求size_t
的大小相等或大于int
。但我不知道有哪个平台不是这种情况。因此,从int
到size_t
的转换属于第二类。
总结一下:正如我之前所说,您很可能不会收到int
size_t
C++转换的警告,除非您将 g++ 与-Wsign-conversion
switch 一起使用。
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- C++:如何循环通过向量中的整数元素
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 不允许在向量中添加更多元素
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 使用并行参数向量调用元素向量的成员函数
- C++ 查找字符串中存在的元素向量
- 包含 std::threads 的元素向量
- 避免从单一元素向量转换为基元类型
- 对自定义元素向量进行排序时出现意外(至少对我来说)行为
- 如何为对元素(向量和int)配对创建unique_ptr也是unique_ptr
- 元素向量乘法 C++(代码不起作用)
- 时间和空间复杂性在二叉树的每个级别创建元素向量(NON-BST)
- 遍历结构元素向量
- 犰狳C++中的元素向量或矩阵乘法
- 为什么'std::vector<int> b{2};'创建 1 元素向量,而不是 2 元素向量?
- 可移动元素向量的大小调整是否有效?
- 唯一元素向量的c++模板函数
- 获取索引和元素-向量问题
- 定义一个生成元素向量的函数时,正确的方法是什么?