如何检查矢量元素是否连续有序
How can I check if vector elements are in order consecutively?
我需要检查向量中的元素是否连续有序?
for(i=1; i<=K; i++)
if(v[i]=v[i+1]-1)
如果语句为真,我想返回最大的整数。
例 4 5 6 7
7
有一个算法: std::is_sorted
:
if (std::is_sorted(v.begin(), v.end()) {
return v.back(); // the largest element would be the last one
}
else {
// ??
}
我需要检查我的向量中的元素是否有序
使用 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()
.
我会使用:
is_sorted(begin(v), end(v));
如果序列未排序,则使用:
max_element(begin(v), end(v));
以获得最大值。
使用 stl 的 std::is_sorted 算法。
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]
.
从这个问题来看,你似乎对向量元素是否是相交整数感兴趣。如果是这种情况,您可以使用标志来指示条件是否成立并执行单次迭代:
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。
从
第二个元素开始遍历向量并保持标志变量初始化为 0,对于每次迭代,检查以下条件:-
if(v[i]<v[i-1])
如果此条件为 true,则将标志设置为 1 并脱离循环。控件移出循环后,检查 flag 的值。如果标志为 1,则向量元素不按顺序排列。否则,如果标志为 0,则向量元素是有序的,您必须打印最大的元素 v[v.size()-1]。
相关文章:
- 是否可以在c++中处理字符串流中的各个元素
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 是否可以使用 new 指定具有宏常量的动态分配数组的元素?
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 如何知道地图中的最后一个元素是否被删除?
- 检查 TinyXML 中的元素是否存在
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 是否需要 mutex() 来安全地同时访问具有 2 个线程的数组的不同元素?
- 是否有用于元素部分移位的 simd 指令/内在/内置指令?
- 是否有具有外部元素分配的序列容器(在 STL 中)?
- C++:是否可以编写一个函数,将不同类型的元素附加到变体数组中?
- 数组对象的生存期是否在重用其元素存储时结束?
- 擦除是否删除 stl 无序列图元素使用的堆内存
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- 除了 std::vector 之外,是否有一个 std 容器不会复制和销毁作为类的元素?
- 是否可以使用宏来访问动态数组或向量中的元素或为其赋值
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- 使用 at() 访问 std::map 元素是否比运算符 [] 慢?