有什么方法可以将数组中的两个元素与cpp中的每个循环进行比较?
int [] s {1,2,3,3,3,4,5};
int size = 7;
for(int i = 0 ; i< size;i++){
if(s[i] == s[i+1]){
//instructions
}
}
是否可以通过
做同样的事情for(int x : s){
//required part to be answered
}
是否可以通过foreach循环进行这种比较?
答案 0 :(得分:3)
是否可以通过foreach循环进行这种比较?
简短答案:否。
长答案:
您能找到的最接近的是:
for(int& x : s){
int* p1 = &x;
int* p2 = p1 + 1;
if ( *p1 == *p2 ) { ... }
}
但是,当x
对应于数组的最后一个元素时,p2
指向数组中最后一个元素之外的元素。此时取消引用p2
会导致行为未定义。
在修复了编译器错误和逻辑错误之后,最好还是坚持第一种方法。
int s[] = {1,2,3,3,3,4,5};
int size = sizeof(s)/sizeof(s[0]);
for(int i = 0 ; i < size - 1; i++){
if(s[i] == s[i+1]){
//instructions
}
}
答案 1 :(得分:0)
不,在每个循环中都不能进行这种类型的比较。
答案 2 :(得分:0)
如果编译器支持C ++ 17,则可以通过以下方式使用基于范围的for循环
int a[] = { 1, 2, 3, 3, 3, 4, 5 };
for ( int prev = 0; const auto ¤t : a )
{
if ( prev == current ) std::cout << "Adjacent elements equal to " << prev << '\n';
prev = current;
}
我想数组的第一个元素不等于0。
答案 3 :(得分:0)
您不能为此直接使用范围。
标准提供了std::adjacent_find,可以帮助您:
int s[] = {1,2,3,3,3,4,5};
for (auto it = std::adjacent_find(std::begin(s), std::end(s));
it != std::end(s);
it = std::adjacent_find(std::next(it), std::end(s)))
{
// instructions
}