C++中类模板或函数模板的使用问题:我在研究一段代码,可看不懂函数模板中 (*(start+j)).x什么意思?

template<classForwardIterator>就是下面这段代码:中的(*(start+j)).x是什么用法啊?请高手指教doubleGetDistance(... template<class ForwardIterator>
就是下面这段代码:中的 (*(start+j)).x是什么用法啊?请高手指教
double GetDistance(const ForwardIterator start, int i, int j)
{
return ::sqrt(::pow(((*(start+i)).x - (*(start+j)).x), 2) + ::pow(((*(start+i)).y - (*(start+j)).y), 2));
}
展开
 我来答
敛正雅7f
2011-05-20 · TA获得超过2031个赞
知道大有可为答主
回答量:1553
采纳率:0%
帮助的人:1759万
展开全部
按所给的信息,得到以下结果:

有一个容器(数组或链表)保存了一系列点的信息。
这个容器有一个迭代器ForwardIterator
start表示这个迭代器的起始位置。
i表示第i个元素,j表示第j个元素。
(start+i)表示指向容器中第i个元素
*(start+i)就取得容器中第i个元素。
从上面代码看,取得的元素应该是一个类或一个结构体,里边有坐标(x,y)的信息。
因此(*(start+i)).x就得到这个元素的x坐标。
追问
您好,请问:template 中的模板参数类型可以是任意类型的,它包括自己定义的结构或类的数据类型吗?
追答
可以,模板的意思就是可以用类型去替换。
261074932
2011-05-20 · TA获得超过365个赞
知道小有建树答主
回答量:305
采纳率:0%
帮助的人:154万
展开全部
(*(start+j))应该是是一个已经定义声明结构体或者类,“.”运算符代表调用成员函数或者成员。
(*(start+j))中start+j是一个地址,*是解引用运算符,模糊点说就是把存在start+j地址中的一个类或者结构体取出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ExcaliburZ
2011-05-20 · TA获得超过1102个赞
知道小有建树答主
回答量:750
采纳率:0%
帮助的人:805万
展开全部
很明显的.
start是一个指向一个包含有x,y这两个数据的结构体的模板指针.
(start+j)就是指针便宜j个单位.
*(start+j)自然就是指取出这个指针位置的值.*也是指针取值运算符
(*(start+j)).x就是取这个结构体中的x值出来了.
等同于(start+j)->x
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式