矢量元素按升序排列

时间:2014-11-19 22:23:21

标签: c++ function sorting vector boolean

我想编写一个布尔函数来查看向量中的元素是否按升序排列。 到目前为止我的代码:

bool if_sorted(vector<int>& v) {
int i;
for (; i < v.size(); i++) {
    if(v[i] < v[i + 1]){
        break;
    } else {
        return false; 
}
if(v[i] == v.size())
    return true;
}

在main()函数中,我只是在if_sorted()函数中键入向量元素,我想看看这些值是否按升序排序。

如何在没有is_sorted等函数的情况下编写此布尔函数,或者修改现有代码?

2 个答案:

答案 0 :(得分:1)

bool if_sorted(vector<int>& v) {

  for (int i = 0; i < v.size() - 1; i++) {
     if(v[i] > v[i + 1]){
        return false; 
  }
  return true;
}

答案 1 :(得分:0)

怎么样,不使用std::is_sorted

Live On Coliru

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

template <typename Container, 
         typename It = typename Container::const_iterator, 
         typename T = typename std::iterator_traits<It>::value_type>
bool if_sorted(Container const &container) {
    using std::begin;
    using std::end;

    It l(end(container));
    return l == std::adjacent_find(begin(container),l,std::greater_equal<T>());
}

int main()
{
    std::vector<int> v(10);
    do    std::generate_n(v.begin(), v.size(), rand);
    while (!if_sorted(v));

    std::cout << "Yay, found a vector that was accidentally sorted: \n";
    std::copy(v.cbegin(), v.cend(), std::ostream_iterator<int>(std::cout, " "));
}

打印随机,排序,10个整数的序列,如

Yay, found a vector that was accidentally sorted: 
338521972 564591732 631716774 818567430 923731840 1036769782 1094628595 1228665979 1863863464 2024865477