程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++標准庫中的查找函數之有序區間的函數

C++標准庫中的查找函數之有序區間的函數

編輯:C++入門知識

地點:基地

時間:2014.04.01

--------------------------------------------------------------------------

一、概述

用於有序區間的函數有一下三個,每種方法都使用了兩個指針first和last,用於限制元素的域為 [first,last),注意這裡是半開半閉區間,且這些元素按從小到大的順序排序。

1. bool binary_search(Iterator first,Iterator last,const Item& target);

二分查找目標元素。

Iterator lower_bound(Iterator first,Iterator last,const Item& targrt);

返回的指針指向目標出現在域[first,last)中的指針。如果目標不存在則返回的指針指向第一個比目標大的元素。若果數組的元素都小於目標則返回一個與last指針相等的值。可以看做是可以插入到數列且仍保持數列有序的最左邊的位置。

Iterator upper_bound(Iterator first,Iterator last,const Item&target);

返回的指針指向第一個比目標大的元素,如數組中沒有則返回last指針。可以看成是在目標元素可以插入到數列且保持數列有序的最右的位置。

--------------------------------------------------------------------------

二、實例:

#include
#include
#include
#include
using namespace std;
int main(){
	vector pets;
	pets.push_back("cat");
	pets.push_back("dog");
	pets.push_back("fish");
	pets.push_back("snake");
	pets.push_back("turtle");
	vector::iterator first_dog
		= lower_bound(pets.begin(), pets.end(), "dog");
	vector::iterator after_dog
		= upper_bound(pets.begin(), pets.end(), "dog");
	cout << "lower_bound return value: " << *first_dog << endl;
	cout << "upper_bound return value: " << *after_dog << endl;
	return 0;
}
另外總結一點:當且僅當目標沒有出現在目標域中時,lower_bound和upper_bound才會返回相同的指針,這些函數都使用了二叉查找,運行時間都是對數級的。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved