C++ 为什么迭代器类型与向量容器中的值_type*不匹配?

C++ 为什么迭代器类型与向量容器中的值_type*不匹配?,c++,vector,stl,C++,Vector,Stl,根据最新的STL源代码,我可以在STL_vector.h中找到以下内容 template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) > class vector : protected _Vector_base<_Tp, _Alloc> { private: typedef _Vector_base<_Tp, _Alloc> _Base; public: typedef _Tp

根据最新的STL源代码,我可以在STL_vector.h中找到以下内容

template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
class vector : protected _Vector_base<_Tp, _Alloc>   
{
private:
  typedef _Vector_base<_Tp, _Alloc> _Base;
public:
  typedef _Tp value_type;
  typedef value_type* pointer;
  typedef const value_type* const_pointer;
  typedef value_type* iterator;
  typedef const value_type* const_iterator;
  typedef value_type& reference;
  typedef const value_type& const_reference;
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
...

int main() {
vector<string>::iterator it;

cout << "iterator type check 1 " << (typeid(it) == typeid(string *)) << endl;
cout << "iterator type check 2" << (typeid(vector<string>::iterator) == typeid(vector<string>::value_type *)) << endl;
cout << "iterator type check 3" << (typeid(vector<string>::pointer) == typeid(vector<string>::value_type *)) << endl;
cout << "iterator type check 4" << (typeid(string *) == typeid(vector<string>::value_type *)) << endl;
模板
类向量:受保护的_向量_基
{
私人:
类型定义(矢量)基(基);;
公众:
typedef_Tp value_type;
typedef值\u type*指针;
类型定义常量值\u类型*常量指针;
类型定义值\u类型*迭代器;
typedef常量值\u type*常量迭代器;
类型定义值\u类型和参考;
类型定义常量值\u类型和常量参考;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
...
int main(){
向量::迭代器;

CUT< P> STL不是C++标准库。C++标准允许实现使用随机访问迭代器的指针,但不指定它。CLAN和GCC都使用用户定义的类型来代替这些指针,而GCC。 您需要查看实际试图编译的代码的实现,而这不是STL

例如,在GCC4.8上,std::vector::iterator是

typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
typedef\uuu gnu\ucxx::\uu normal\u迭代器;

其中
\uuu normal\u iterator
是一个类模板。

很酷,谢谢!在你回答之前我没有意识到这一点,命名很混乱。你的回答肯定解释了我的测试结果。我下载了gcc源代码,它使用的是另一种类型。我对stackoverflow非常陌生,很抱歉我不能投你的票。