如何处理被int的std :: vector <...> :: size_type

时间:2019-05-23 09:55:56

标签: c++ types

我有两个向量:

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

在程序v_a期间填充了值。 现在,我想将类型A的值转换为B并填充v_b

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

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')

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

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

如何在不产生新警告的情况下(安全)检查v_a.size() < v_b.max_size()


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

2 个答案:

答案 0 :(得分:3)

  

vector的{​​{1}}是size_type的可能性如何,应该   至少是未签名的?

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

  

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

不完全是。两个size_type(具有不同的元素类型或分配器类型)可以自由地具有不同的vector,只要它们是无符号整数类型并且可以表示相应{{1 }}。

  

是否可以修改size_type

不。您不能直接更改库。

  

如何(安全)检查是否difference_type没有   产生新的警告?

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

size_type

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

答案 1 :(得分:3)

感谢L. F.回答了问题。

正如AMA指出的,真正的问题是在const的类型参数中使用v_a。这导致编译器错误,并最终导致我的问题中所述的警告。

解决方案是删除const限定符并修复相关类型。