codecamp

C++ 查找

我们要编写的下一个函数是find,它的作用是在纸牌向量中查找指定的牌。这个函数的用途可能不是那么明显,但是我们可以利用它来演示两种查找方法,即线性查找和二分查找。

线性查找是比较直观的一个;它包括遍历牌堆并拿每张牌和我们要找的牌进行比较。如果找到了,返回纸牌出现位置的索引;没找到则返回-1。

int find (const Card& card, const apvector<Card>& deck) {
  for (int i = 0; i < deck.length(); i++) {
    if (equals (deck[i], card)) return i;
  }
  return -1;
}

这里的循环与printDeck中的循环完全一致。实际上,这段代码是从printDeck中复制而来的,这就避免了编写和调试两次。

在循环内部,我们将牌堆中的每个元素都与指定的纸牌进行比较。一旦找到,函数就立即返回,也就是说,如果找到指定的牌,那就不需要遍历整个牌堆。如果循环结束时还没有找到,我们就可以确定牌堆中没有指定的牌,最后返回-1。

我们使用下面代码来测试该函数:

apvector<Card> deck = buildDeck ();

int index = card.find (deck[17]);
cout << "I found the card at index = " << index << endl;

这段代码的输出是:

I found the card at index = 17 
C++ printDeck函数
C++ 二分查找
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }