gpt4 book ai didi

c++ - 如何处理 std::vector<...>::size_type 为 int

转载 作者:太空狗 更新时间:2023-10-29 20:08:13 25 4
gpt4 key购买 nike

我有两个 vector :

std::vector<const A> v_a;
std::vector<B> v_b;

在节目中v_a充满了值(value)。现在我想转换类型 A 的值进入B并填写 v_b .

我首先调整 v_b 的大小,请注意 std::transform 不适合我:

v_b.resize(v_a.size());        // Auto-construct new elements using default c-tor

这会导致以下警告:

Value Conversion Issue
-Wsign-conversion
202:55: warning: implicit conversion changes signedness: 'std::vector<const A, std::allocator<const A> >::size_type' (aka 'int') to 'std::vector<B, std::allocator<B> >::size_type' (aka 'unsigned long long')

vector size_type 怎么可能是 int,它至少应该是无符号的?

两个 vector 有不同的 size_types 怎么可能?即使它们在不同的源文件中定义,编译器也应该使用相同的类型。是否可以修改 size_type?

我如何(安全地)检查 v_a.size() < v_b.max_size()没有产生新的警告?


QT-Creator 声明我使用“Microsoft Visual C++ Compiler 15.0 (amd64)”作为编译器。

最佳答案

How is it possible that a vector's size_type is int, it should at least be an unsigned?

这是实现的问题。每[container.requirements.general]/4 , X::size_type是无符号整数类型,其中 X是一个容器。 vector是一个容器。

How is it possible that two vectors have different size_types? Even if they are defined in different source files the compiler should use the same type.

不完全是。两个 vector s(具有不同的元素类型或分配器类型)可以自由地具有不同的 size_type s,只要是无符号整数类型,可以表示对应difference_type的任意非负值即可.

Is it possible to modify the size_type?

没有。您不能直接更改库。

How can I (safely) check if v_a.size() < v_b.max_size() without producing new warnings?

对于您当前的情况,您可以使用强制转换作为解决方法。

v_b.resize(static_cast<std::vector<B>::size_type>(v_a.size()));

再说一次,无论如何这是实现的一个错误,这不是你的错。

关于c++ - 如何处理 std::vector<...>::size_type 为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56272648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com