我需要检查在我的向量中元素是否连续顺序?
for(i=1; i<=K; i++)
if(v[i]=v[i+1]-1)
如果该陈述为真,我想返回最大的整数。
离。 4 5 6 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]。