C++中的通用模板

Generic Templates in C++

本文关键字:C++      更新时间:2023-10-16

我不明白以下问题的答案:

编写一个C++函数find_elem,它使用两个迭代器,第一个和最后一个T类型的元素序列和T类型的对象obj。它将迭代器返回到范围[first,last)中obj的第一个出现,或者如果obj不在序列中,则返回迭代器last。

这就是的答案

template <typename It, typename T>
It find_elem(It first, It last, const T & obj) {
   while (first != last && (*first) != obj) // I DON'T UNDERSTAND THIS LINE
   ++first;
   return first;
}

我不理解下面的while (first != last && (*first) != obj)行。当问题要求您返回带有obj的第一个实例的迭代器时,为什么是(*first != obj)。我也没有得到下面的行++first,因为你为什么要增加迭代器first

++第一个由while循环执行。我会在这里使用{}来让它更清楚:

while (first!=last && (*first)!=obj) {
   ++first;
}

因此,while循环检查(*first)是否=obj。如果不是,那么它将首先使用++移动到列表中的下一个元素,这将使迭代器递增。然后,当first==last时(意味着我们已经浏览了整个列表),或者当(*first)==obj时,意味着我们找到了要找的东西,它就会结束。

first副本传递给函数。这意味着函数可以通过使用变量来迭代序列来安全地修改变量。

这只是以下代码的一个简洁的替代方案:

template <typename It, typename T>
It find_elem(It first, It last, const T & obj) {
   It iterator = first;
   while (iterator != last && (*iterator) != obj)
   ++iterator;
   return iterator;
}

顺便说一下。。。"通用模板"听起来很奇怪,因为模板总是通用的。不过,我认为模板模板参数可以称为"通用模板"。

相关文章:
  • 没有找到相关文章