关闭

STL常用查找算法介绍

标签: stl查找算法
540人阅读 评论(1) 收藏 举报
分类:

adjacent_find()

在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器。否则返回past-the-end。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

void play_adjacent_find()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(5);

	vector<int>::iterator it = adjacent_find(v1.begin(), v1.end());
	if (it == v1.end())
	{
		cout << "没有找到 重复的元素" << endl;
	}
	else
	{
		cout << *it << endl;
	}
	// 2
	int index = distance(v1.begin(), it);
	cout << index << endl;
	// 1

}

int main()
{
	play_adjacent_find();

	return 0;
}

binary_search()
在有序序列中查找value,找到则返回true。注意:在无序序列中,不可使用。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

// binary_search是对排序好的进行查找
void play_binary_search()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(5);
	v1.push_back(7);
	v1.push_back(9);

	bool b = binary_search(v1.begin(), v1.end(), 7);
	if (b) {
		cout << "find success\n";
	}
	else {
		cout << "find fail\n";
	}
	// find success

}

int main()
{
	play_binary_search();

	return 0;
}

count()
利用等于操作符,把标志范围内的元素与输入值比较,返回相等的个数。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

void play_count()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(3);
	v1.push_back(7);
	v1.push_back(9);
	v1.push_back(3);

	int cnt = count(v1.begin(), v1.end(), 3);
	cout << "count of 3: " << cnt << endl;
	// count of 3: 3

}

int main()
{
	play_count();

	return 0;
}

count_if()
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

bool GreaterThree(const int &a)
{
	return a > 3;
}

void play_count_if()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(4);
	v1.push_back(7);
	v1.push_back(9);
	v1.push_back(3);

	int cnt = count_if(v1.begin(), v1.end(), GreaterThree);
	cout << "count of greater 3: " << cnt << endl;
	// count of greater 3: 3

}

int main()
{
	play_count_if();

	return 0;
}

find()

find:  利用底层元素的等于操作符,对指定范围内的元素与输入值进行比较。当匹配时,结束搜索,返回该元素的迭代器。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

void play_find()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(4);
	v1.push_back(7);
	v1.push_back(9);
	v1.push_back(3);

	vector<int>::iterator it = find(v1.begin(), v1.end(), 4);
	if (it == v1.end()) {
		cout << "find fail\n";
	}
	else {
		cout << "find success\n";
	}
	// find success

}

int main()
{
	play_find();

	return 0;
}

find_if()
find_if: 使用输入的函数代替等于操作符执行find。返回被找到的元素的迭代器。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

bool GreaterThree(const int &a)
{
	return a > 3;
}

void play_find_if()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(3);
	v1.push_back(4);
	v1.push_back(7);
	v1.push_back(9);
	v1.push_back(3);

	vector<int>::iterator it = find_if(v1.begin(), v1.end(), GreaterThree);
	if (it == v1.end()) {
		cout << "find fail\n";
	}
	else {
		cout << "find success\n";
		cout << "value: " << *it << endl;
	}
	// find success
	// value: 4

}

int main()
{
	play_find_if();

	return 0;
}

0
0
查看评论

C++ 之高效使用STL(查找算法的选择)

 你要寻找什么,而且你有一个容器或者你有一个由迭代器划分出来的区间——你要找的东西就在里面。你要怎么完成搜索呢?你箭袋中的箭有这些:count、count_if、find、find_if、binary_search、lower_bound、upper_bound和equal_range。面...
  • zhoukuo1981
  • zhoukuo1981
  • 2008-12-05 13:07
  • 7127

STL源码剖析——STL算法之find查找算法

本文介绍的STL算法中的find、search查找算法。在STL源码中有关算法的函数大部分在本文介绍,包含findand find_if、adjacent_find、search、search_n、lower_bound、 upper_bound、 equal_range、binary_search...
  • chenhanzhun
  • chenhanzhun
  • 2014-09-30 18:34
  • 1966

常见查找算法总结

静态查找结构主要有两种:顺序查找、折半查找 一、顺序查找:这个就不用说了,一个一个的差吧,很差劲的算法了,时间复杂度是O(n)      public int shunXuSearch( int[] ...
  • zengtian006
  • zengtian006
  • 2014-04-18 17:22
  • 5033

STL算法之查找

STL算法库中提供的查找相关算法主要有以下几种: 算法 功能 find 返回第一个等价于给定值的元素的迭代器 1 find函数原型:template <class InputIterator, class T> InputIterator find (InputIter...
  • hihozoo
  • hihozoo
  • 2016-03-03 15:35
  • 703

常用的 STL 查找算法

《effective STL》中有句忠告,尽量用算法替代手写循环;查找少不了循环遍历,在这里总结下常用的STL查找算法;
  • hbdhj
  • hbdhj
  • 2016-04-01 13:04
  • 123

常用的STL查找算法

 《effective STL》中有句忠告,尽量用算法替代手写循环;查找少不了循环遍历,在这里总结下常用的STL查找算法; 查找有三种,即点线面: 点就是查找目标为单个元素; 线就是查找目标为区间; 面就是查找目标为集合; 针对每个类别的查找,默认的比较函数是相等,为了满足更丰富的需...
  • gudongxian
  • gudongxian
  • 2015-07-04 23:04
  • 234

STL_算法_查找算法(binary_search、includes)

C++ Primer 学习中。。。   简单记录下我的学习过程 (代码为主) 所有容器适用(O(log(n)))     已序区间查找算法 binary_search       ...
  • u010579068
  • u010579068
  • 2016-01-12 14:01
  • 1229

几种常见的查找算法之比较

一、顺序查找   条件:无序或有序队列。   原理:按顺序比较每个元素,直到找到关键字为止。   时间复杂度:O(n) 二、二分查找(折半查找)   条件:有序数组   原理:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;      如果某一特定元素大于或者小于中间...
  • m372897500
  • m372897500
  • 2016-05-23 01:07
  • 397

C++ STL简单介绍

STL(Standard Template Library,标准模板库)是C++对泛型编程思想的实现,最早是惠普实验室开发的。 在被引入C++之前该技术就已经存在了非常长的一段时间。后来STL成为ANSI/ISO C++标准的一部分。各个 C++厂商也有各自对应的模板库,这些库效率可能非常高,但...
  • w_16822
  • w_16822
  • 2016-10-14 10:53
  • 262

STL常用的查找算法(13)

函数名 头文件 函数功能 adjacent_find 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的ForwardIterator .否则返回last.重载版本使用输入的二元操作符代替相等的判断 函数原形 ...
  • bbs375
  • bbs375
  • 2016-10-01 08:54
  • 107
    个人资料
    • 访问:423898次
    • 积分:8210
    • 等级:
    • 排名:第2964名
    • 原创:401篇
    • 转载:30篇
    • 译文:11篇
    • 评论:87条
    博客专栏