使用std :: adjacent_find和自定义谓词

时间:2016-12-22 20:30:26

标签: sorting c++11 stl stl-algorithm

我无法在向量中搜索并打印出从左到右分隔2的元素对。我需要收集对

我正在操作的示例数据是:

std::vector<int> myvector = { 1, 3, 3, 5, 7, 9, 13, 10, 12 };

鉴于std :: adjacent_find谓词是:

static const auto gAdjacentPred = [](
    const int& lhs, const int& rhs) {
    std::cout 
        << "(" << lhs << ":" << rhs << ")?" 
        << std::string((rhs == lhs+2)? "true" : "false") 
        << std::endl;
    return (rhs == lhs+2);
};

我希望得到以下结果(在此过程中多次调用谓词):

{1,3}, {3,5}, {5,7}, {7,9} & {10,12}

理想的想法(我不知道怎么做)我想在输入数据的中间合并满足谓词的值... 3,5,7,9 ...作为单个结果{3, 9}

问题是我真的不明白如何正确循环集合。我确实看到std :: next(iter)是一个技巧,我可以使用它来查看满足lambda的最右边的值,但是这有时可以指向集合的结尾。

我期待循环数据的方式会在对集合进行迭代时显示对谓词的多次调用 - 因为事实证明它只调用谓词函数一次(当我分配给{{1另外,在结果中我看到对13和10似乎满足谓词。有人可以解释这里发生了什么,因为我需要从左到右找到不同的值 - 在我的情况下这里2(左侧小于右侧(我从左到右搜索增加值)。

adjIter

问题是最后一对也被认为是

(1:3)?true
{1,3}
{3,5}
{7,9}
{13,10}

0 个答案:

没有答案