是迭代器的指针类型转换吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是迭代器的指针类型转换吗?相关的知识,希望对你有一定的参考价值。
我遇到了以下代码:
int data[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 };
reverse(data+2, data+6);
当我检查反向功能的原型时,它:
void reverse (BidirectionalIterator first, BidirectionalIterator last)
那么,它隐含的类型转换在这里吗?
那么,它隐含的类型转换在这里吗?
否。指针可用作算法模板函数的迭代器,因为模板类型充当概念。
标准容器迭代器实现和指针允许对它们应用相同的操作(++
,--
,*
,->
,...)。
值得注意的是,像BidirectionalIterator
这样的模板参数类型具有某些std::iterator_traits
,它详细描述了需要支持哪些操作。
实际上算法被声明为
template<class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last);
所以它是一个模板功能。它可以写成
template<class T>
void reverse(T first, T last);
模板参数的名称BidirectionalIterator
用于表示用户提供的模板参数必须与operator ++ also运算符分开。指针满足这一要求。
至于迭代器那么(C ++标准,27.2迭代器要求,27.2.1一般)
1迭代器是指针的泛化,允许C ++程序以统一的方式处理不同的数据结构(容器)......
reverse
的论点是模板化的。在语法上,参数可以具有任何类型,但算法将具有标准中指定的类型的要求。具体来说,它要求模板参数是双向迭代器。
如果类型满足标准中规定的Iterator
概念的要求,则类型是迭代器。类似地,如果迭代器满足BidirectionalIterator
的要求,它就是双向迭代器。
指针类型满足RandomAccessIterator
的所有要求。因此指针是迭代器,更具体地说它们是随机访问迭代器。所有随机访问迭代器也是双向迭代器。
因此,不涉及转换,指针按原样使用。
以上是关于是迭代器的指针类型转换吗?的主要内容,如果未能解决你的问题,请参考以下文章