繁体   English   中英

std :: vector :: size返回int类型或unsigned int

[英]std::vector::size return an int type or unsigned int

在我使用std::vector编写的大多数程序中,我的大部分痛苦都在转换

int offset=(int)v.size();
unsigned int offset=(unsigned int)v.size();

可悲的是,这些问题反映在如许多其他问题这个

有没有办法重新连接std::vector并强制它给intunsigned int这样的大小?

int offset=v.size_i();

类型转换会使代码变得更加混乱。 虽然,一些程序员喜欢它们,并且觉得每次都没有问题。

c++14解决方案是更受欢迎的,但c++17解决方案也是受欢迎的。

如果有人建议改变变量的类型,很快或者迟到另一种类型的铸造必须发生。 所以它没有解决问题。

请考虑这些丑陋的短语

function((int)myvar1.vec[32].size(),(int)myvar2.vec[32].size());

function只接受int 我无法控制它的定义。

你可以从std::vector继承并重新实现size()函数来返回有符号值:

template<typename T, typename Alloc = std::allocator<T> >
class my_vector : public std::vector<T, Alloc>
{
    using base_t = std::vector<T,Alloc>;
public:
    using base_t::vector;
    using base_t::operator =;

    int size() const noexcept { return base_t::size(); }
};

std::vector<>.size()将是unsigned 它是类连接的方式,它甚至包括一个typedef用于什么类型,即std::vector<>::size_type 养成使用unsigned偏移的习惯会好得多。

在c ++ 20中,您可以使用std :: ssize返回一个signed int。

用它作为:

std::ssize(my_std_vector)

要么:

my_std_vector.ssize()

将其引入标准库的提案是P1227R1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM