我想编写一个布尔函数来查看向量中的元素是否按升序排列。 到目前为止我的代码:
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等函数的情况下编写此布尔函数,或者修改现有代码?
答案 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