C++ 为什么迭代器类型与向量容器中的值_type*不匹配?
根据最新的STL源代码,我可以在STL_vector.h中找到以下内容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
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非常陌生,很抱歉我不能投你的票。