我注意到std::容器往往有public类内类型别名(typedef/ using).例如,请参阅http://en.cppreference.com/w/cpp/container/vector上的"成员类型" .
它们有用吗?他们不是只是一个时代的遗物时,C++没有之类的东西auto和decltype?
实现自定义容器时,是否应该有这样typedef的?如果我没有提供,我会失去什么?
如果需要与标准库兼容的容器,则必须提供typedef.
如果你查看文档,例如在cppreference,你会看到这样的段落:
std :: vector满足Container,AllocatorAwareContainer,SequenceContainer,ContiguousContainer(除了bool之外的T)(自C++ 17)和ReversibleContainer的要求.
如果你看到了集装箱或SequenceContainer或上市还有其他的事情,你会发现需求列表,和类型定义(或者更确切地说类型,它们不具备成为类型定义,但他们往往是)也在其中.
因此,如果您在标准意义上构建容器,则需要提供typedef(当然也满足所有其他要求).
从理论上讲,C++ 11可以放宽要求,但事实并非如此.也许是因为
std::vector<int>::iterator
Run Code Online (Sandbox Code Playgroud)
比...更具可读性
decltype(std::declval<std::vector<int>>().begin())
Run Code Online (Sandbox Code Playgroud)
或者也许出于其他原因.