warning: implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'result_type' (aka 'int')
代码
vector<pair<int, int>> emptyCells;
uniform_int_distribution<> dis(0, emptyCells.size() - 1);
编译warning
warning: implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'result_type' (aka 'int')
因为 uniform_int_distribution<> 期望一个 int类型的范围,但是 emptyCells.size() - 1 返回的是 size_t(无符号长整型)类型。
当 size_t 转换为int 时,如果值超过 int 的范围(通常是 2147483647),可能会丢失精度或出现未定义行为。
问题原因:
vector::size()返回size_t(无符号类型)uniform_int_distribution<>默认使用int类型- 类型不匹配导致隐式转换
解决方案:显示转换为 int。
uniform_int_distribution<> dis(0, static_cast<int>(emptyCells.size()) - 1);

浙公网安备 33010602011771号