簡単なプログラム解釈C++STLアルゴリズムシリーズの11:search_n
C++STLの非可変アルゴリズム(Non-mutating algorithms)は、操作データを破壊しないテンプレート関数のセットであり、シーケンスデータの個々の処理、要素検索、サブシーケンス検索、統計、マッチングを行うために使用される.
繰り返しメタサブシーケンス検索search_nアルゴリズム:一連の要素値が所定の値のサブシーケンスであるかどうかを検索します.次の2つの関数プロトタイプがあります.反復器区間[first,last]でcount個の連続要素があるかどうかをそれぞれ検索し、その値はvalue(または述語判断binary_predの条件を満たす)に等しく、サブシーケンスの最初の要素の反復器、またはlastを返して重複要素のないサブシーケンスを表す.
関数のプロトタイプ:
サンプル・プログラム:
探索ベクトル容器ivect={1,8,8,8,4,,4,3}の3つの連続要素は8であり、4つの連続要素は8ではなく、3つの連続要素の2倍は16である.
*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************
繰り返しメタサブシーケンス検索search_nアルゴリズム:一連の要素値が所定の値のサブシーケンスであるかどうかを検索します.次の2つの関数プロトタイプがあります.反復器区間[first,last]でcount個の連続要素があるかどうかをそれぞれ検索し、その値はvalue(または述語判断binary_predの条件を満たす)に等しく、サブシーケンスの最初の要素の反復器、またはlastを返して重複要素のないサブシーケンスを表す.
関数のプロトタイプ:
template<class ForwardIterator1, class Diff2, class Type>
ForwardIterator1 search_n(
ForwardIterator1 _First1,
ForwardIterator1 _Last1,
Size2 _Count,
const Type& _Val
);
template<class ForwardIterator1, class Size2, class Type, class BinaryPredicate>
ForwardIterator1 search_n(
ForwardIterator1 _First1,
ForwardIterator1 _Last1,
Size2 _Count,
const Type& _Val,
BinaryPredicate _Comp
);
サンプル・プログラム:
探索ベクトル容器ivect={1,8,8,8,4,,4,3}の3つの連続要素は8であり、4つの連続要素は8ではなく、3つの連続要素の2倍は16である.
/*******************************************************************
* Copyright (C) Jerry Jiang
* File Name : search_n.cpp
* Author : Jerry Jiang
* Create Time : 2011-10-11 22:23:47
* Mail : [email protected]
* Blog : http://blog.csdn.net/jerryjbiao
* Description : C++ STL
* : search_n
******************************************************************/
#include <algorithm>
#include <vector>
#include <iostream>
bool twice(const int para1, const int para2)
{
return 2 * para1 == para2;
}
using namespace std;
int main()
{
vector<int> ivect;
ivect.push_back(1);
ivect.push_back(8);
ivect.push_back(8);
ivect.push_back(8);
ivect.push_back(4);
ivect.push_back(4);
ivect.push_back(3);
vector<int>::iterator iLocation;
iLocation = search_n(ivect.begin(), ivect.end(), 3, 8);
if (iLocation != ivect.end())
{
cout << " ivect 3 8" << endl;
}
else
{
cout << " ivect 3 8" << endl;
}
iLocation = search_n(ivect.begin(), ivect.end(), 4, 8);
if (iLocation != ivect.end())
{
cout << " ivect 4 8" << endl;
}
else
{
cout << " ivect 4 8" << endl;
}
iLocation = search_n(ivect.begin(), ivect.end(), 2, 4);
if (iLocation != ivect.end())
{
cout << " ivect 2 4" << endl;
}
else
{
cout << " ivect 2 4" << endl;
}
iLocation = search_n(ivect.begin(), ivect.end(), 3, 16, twice);
if (iLocation != ivect.end())
{
cout << " ivect 3 16" << endl;
}
else
{
cout << " ivect 3 16" << endl;
}
return 0;
}
*******************************************************************************************************************************
C++経典書目索引及び資源ダウンロード:http://blog.csdn.net/jerryjbiao/article/details/7358796
********************************************************************************************************************************