如何检查矢量元素是否连续排序?

时间:2016-02-03 16:10:23

标签: c++ vector

我需要检查在我的向量中元素是否连续顺序?

for(i=1; i<=K; i++)
    if(v[i]=v[i+1]-1)

如果该陈述为真,我想返回最大的整数。

  

离。 4 5 6 7

7

7 个答案:

答案 0 :(得分:10)

有一种算法:std::is_sorted

if (std::is_sorted(v.begin(), v.end()) {
    return v.back(); // the largest element would be the last one
}
else {
    // ?? 
}

答案 1 :(得分:3)

  

我需要检查我的向量中的元素是否按顺序

使用C ++ 11的std::is_sorted算法:

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

int main()
{
    std::vector<int> v1 { 4, 5, 7, 6 };
    std::vector<int> v2 { 4, 5, 6, 7 };

    using std::begin;
    using std::end;

    std::cout << std::is_sorted(begin(v1), end(v1)) << "\n";
    std::cout << std::is_sorted(begin(v2), end(v2)) << "\n";
}
  

如果该陈述为真,我想返回最大的整数。

这是std::max_element的工作:

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

int main()
{
    std::vector<int> v1 { 4, 5, 7, 6 };
    std::vector<int> v2 { 4, 5, 6, 7 };

    using std::begin;
    using std::end;

    std::cout << *std::max_element(begin(v1), end(v1)) << "\n";
    std::cout << *std::max_element(begin(v2), end(v2)) << "\n";
}

请注意,std::max_element 要求对其输入进行排序。

或者如果它仍然是排序的,只需使用v1.back()

答案 2 :(得分:2)

我会用:

is_sorted(begin(v), end(v));

如果序列未排序,请使用:

max_element(begin(v), end(v));

获得最大值

答案 3 :(得分:2)

使用STL的std::is_sorted算法。

答案 4 :(得分:1)

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

如果向量是有序的,那么最大的是最后一个,即v[v.size()-1]

答案 5 :(得分:1)

从问题看来,如果向量元素是连续的整数,你似乎感兴趣。如果是这种情况,您可以使用一个标志来指示条件是否成立并执行单次迭代:

bool consecutive = false;
for (int i = 1; i < v.size(); ++i) {
  if (v[i] != v[i - 1] + 1) {
    consecutive = false;
    break;
  }
}
if (consecutive) {
   cout << v.back() << endl; // the last element is the biggest.
}

但是,您的问题标题表明您有兴趣检查矢量是否已排序。如果是这种情况,您可以使用自c ++ 11以来存在的内置函数std::is_sorted

答案 6 :(得分:1)

从第二个元素开始遍历向量并保持一个初始化为0的标志变量,每次迭代检查以下条件: -

if(v[i]<v[i-1])

如果此条件为真,则将标志设置为1并退出循环。控件移出循环后,检查flag的值。如果flag为1,则向量元素不按顺序排列。否则,如果标志为0,则向量元素按顺序排列,您必须打印最大的元素v [v.size() - 1]。