为何std::vector<int>::iterator不是连续迭代器?标准与实现疑问
关于vector::iterator的连续迭代器特性问题
根据C++标准(除bool类型外),std::vector<T>::iterator应当是连续迭代器(contiguous iterator),但目前MSVC、GCC、Clang三大主流编译器的实现均未符合这一要求。
测试代码如下:
#include <iterator> #include <vector> using InputIterator = std::vector<int>::iterator; static_assert(std::is_same_v<typename std::iterator_traits<InputIterator>::iterator_category, std::random_access_iterator_tag>); static_assert(std::is_same_v<typename std::iterator_traits<InputIterator>::iterator_category, std::contiguous_iterator_tag>);
上述代码中,第一个static_assert用于验证迭代器的分类为随机访问迭代器,能够正常通过;第二个static_assert验证其分类为连续迭代器,在三大编译器的最新版本中均会失败。
内容的提问来源于stack exchange,提问作者Violet Giraffe
相关产品推荐
相关产品推荐

