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

ar2*_*015 5 c++ vector c++14

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

int offset=(int)v.size();
unsigned int offset=(unsigned int)v.size();
Run Code Online (Sandbox Code Playgroud)

令人遗憾的是,此类问题还反映在诸如此类的许多其他问题

有没有什么方法可以重新布线std::vector并强制它给出大小intunsigned int类似的大小?

int offset=v.size_i();
Run Code Online (Sandbox Code Playgroud)

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

c++14更优选解决方案,但c++17也欢迎解决方案。

如果有人建议更改变量的类型,那么迟早必须发生另一种类型转换。所以它并不能解决问题。

请考虑一下这些丑陋的短语

function((int)myvar1.vec[32].size(),(int)myvar2.vec[32].size());
Run Code Online (Sandbox Code Playgroud)

其中function仅接受ints。我无法控制它的定义。

And*_* R. 4

您可以继承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(); }
};
Run Code Online (Sandbox Code Playgroud)

  • @ar2015 请记住,“std::vector”没有“virtual”析构函数。它不是为(公共)继承而设计的。 (5认同)
  • @ar2015 考虑[提交提案](https://isocpp.org/std/submit-a-proposal) (2认同)