- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想打印前两个值,其中下一个值是当前值的两倍。
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
bool doubled (int x, int y) { return x*2 == y; }
int main()
{
deque<int> di;
deque<int>::iterator diiter;
for (int i=0; i<=10; i+=2) di.insert(di.end(), i);
for (diiter = di.begin(); diiter != di.end(); ++diiter)
cout << *diiter << " ";
cout << endl;
diiter = adjacent_find(di.begin(), di.end(), doubled);
if (diiter != di.end()) {
cout << "found " << *diiter << " at " << distance(di.begin(), diiter)+1
<< " and " << *(++diiter) << " at " << distance(di.begin(), diiter)+1
<< endl;
}
}
输出是
0 2 4 6 8 10
found 4 at 3 and 4 at 2
不是我所期望的,应该是:
0 2 4 6 8 10
found 2 at 2 and 4 at 3
我的代码有什么问题?我不明白当我实际增加它时,第二个位置是如何从第一个位置减少的。感谢所有帮助。
最佳答案
您的程序给出了奇怪的结果,因为它没有考虑到函数参数的求值顺序(在本例中为运算符 <<)未指定。
我的答案 here ,详细解释了问题,应该是一本好书。
您需要在单独的语句中cout
它们。
cout << "found " << *diiter;
cout << " at " << distance(di.begin(), diiter)+1;
cout << " and " << *(++diiter);
cout << " at " << distance(di.begin(), diiter)+1;
cout << endl;
This 运行良好并输出正确/所需的输出。
关于c++ - 打印从 adjacent_find 返回的两个相邻值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7073916/
假设我有一个包含元素 1、2、3、4、5、5 的 vector 。我有这样的代码。 it = std::adjacent_find (myvector.begin(), myvector.end())
我想打印前两个值,其中下一个值是当前值的两倍。 #include #include #include using namespace std; bool doubled (int x, int
adjacent_find() 函数用于在指定范围内查找 2 个连续相等的元素。该函数的语法格式为: //查找 2 个连续相等的元素 ForwardIterator adjacent_find (F
使用std::greater_equal是UB吗?在 std::adjacent_find在排序范围内找到等效(与相等相反)元素的算法? 如果 std::greater_equal<>{}(*prev
std::adjacent_find searches the range [first, last) for two consecutive identical elements. Return v
我正在尝试对我正在使用的特殊协议(protocol)的字符串执行运行长度压缩。当运行大小或字符串中的特定字符 >=3 时,运行被认为是有效的。有人可以帮助我实现这一目标。我有 live demo on
我是一名优秀的程序员,十分优秀!