• STL algorithmi算法s_sorted和is_sorted_until(28)


    is_sort原型:

    ::is_sorted

    default (1)
    template <class ForwardIterator>
      bool is_sorted (ForwardIterator first, ForwardIterator last);
    
    custom (2)
    template <class ForwardIterator, class Compare>
      bool is_sorted (ForwardIterator first, ForwardIterator last, Compare comp);
    该函数是測试范围内的元素是否已经有序!

    使用operator<或者comp来进行比較。

    假设范围内的元素个数少于两个,总是返回true.

    其行为类似例如以下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    template <class ForwardIterator>
      bool is_sorted (ForwardIterator first, ForwardIterator last)
    {
      if (first==last) return true;
      ForwardIterator next = first;
      while (++next!=last) {
        if (*next<*first)     // or, if (comp(*next,*first)) for version (2)
          return false;
        ++first;
      }
      return true;
    }
    一个简单的測试样例:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main(int argv,char **argc)
    {
    	vector<int> v1{1,2,3,4};
    	vector<double> v2{4.0,5.0,3.5,6.0};
    	
    	cout<<"v1=";
    	for(int i:v1)
    		cout<<i<<" ";
    	cout<<endl;
    	
    	if(is_sorted(v1.begin(),v1.end()))
    		cout<<"v1 is sorted!"<<endl;
    	else
    		cout<<"v1 is not sorted!"<<endl;
    	
    	cout<<"v2=";
    	for(double i:v2)
    		cout<<i<<" ";
    	cout<<endl;
    	
    	if(is_sorted(v2.begin(),v2.end()))
    		cout<<"v2 is sorted!"<<endl;
    	else
    		cout<<"v2 is not sorted!"<<endl;
    
    
    }
    执行结果:






    is_sorted_until原型:

    std::is_sorted_until

    default (1)
    template <class ForwardIterator>
      ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last);
    
    custom (2)
    template <class ForwardIterator, class Compare>
      ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last,
                                       Compare comp);
    该函数类似与is_heap和is_heap_until的关系。

    返回第一个破坏序列有序的元素迭代器。

    使用operator<或者comp来进行比較。

    其行为类似与:
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    template <class ForwardIterator>
      ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last)
    {
      if (first==last) return first;
      ForwardIterator next = first;
      while (++next!=last) {
        if (*next<*first) return next;
        ++first;
      }
      return last;
    }

    一个简单的样例:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main(int argv,char **argc)
    {
    	vector<int> v1{1,2,3,4,5};
    	vector<double> v2{4.0,5.0,3.5,6.0,1.0};
    	
    	cout<<"v1=";
    	for(int i:v1)
    		cout<<i<<" ";
    	cout<<endl;
    
    	cout<<"v2=";
    	for(double i:v2)
    		cout<<i<<" ";
    	cout<<endl;
    	
    	auto it=is_sorted_until(v1.begin(),v1.end());
    	if(it==v1.end())
    		cout<<"v1 is sorted!"<<endl;
    	
    	auto it2=is_sorted_until(v2.begin(),v2.end());
    	cout<<"v2 the return is "<<*it2<<endl;
    
    }
    执行截图:


    通过对照源码能够知道,第一个返回的是v1.end(),第二个返回的则是3.5!


    ——————————————————————————————————————————————————————————————————

    //写的错误或者不好的地方请多多指导,能够在以下留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我改动,更好的分享给大家,谢谢。

    转载请注明出处:http://blog.csdn.net/qq844352155

    author:天下无双

    Email:coderguang@gmail.com

    2014-9-17

    于GDUT

    ——————————————————————————————————————————————————————————————————










    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    HDOJ 1220 Cube
    LCIS(m*n) 最长公共上升子序列
    第二百九十七天 how can I 坚持
    第二百九十六天 how can I 坚持
    第二百九十五天 how can i 坚持
    第二百九十四天 how can I 坚持
    第二百九十三天 how can I 坚持
    第二百九十、一、二天 how can I 坚持
    第二百八十九天 how can I 坚持
    第二百八十八天 how can I坚持
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4603946.html
Copyright © 2020-2023  润新知