是否有可以找到最后一个但也可以在指针上使用的STL算法?

问题描述 投票:0回答:1

我有现有的代码,无法切换到迭代器。我仍然想尽可能地使用STL来找到最后一个项目(或者如果您认为我们是从末尾开始迭代的话)。有可能吗?

std :: find_end除了是最差的命名算法之外,似乎很难使用(我需要一个伪造的1元素序列和二进制谓词,在比较中忽略1元素的值)。

我现在所拥有的非常丑陋(尤其是因为bool *的反向不是bool *,所以我必须做些丑陋的事情才能获得std :: distance。

#include <algorithm>
#include <iostream>

int main()
{ 
    {
    bool arr[6] = {true,false,true,true,true,false};
    auto e = std::make_reverse_iterator(&arr[0]);
    auto b = std::make_reverse_iterator(&arr[6]);
    auto it = std::find(b,e, false);
    if (it!=e){
        std::cout << "index of last false is " << &(*it) - &arr[0] << std::endl;
    }
    }
    // repeat test to make sure result is not an accident
    {
    bool arr[6] = {true,false,true,true,false,true};
    auto e = std::make_reverse_iterator(&arr[0]);
    auto b = std::make_reverse_iterator(&arr[6]);
    auto it = std::find(b,e, false);
    if (it!=e){
        std::cout << "index of last false is " << &(*it) - &arr[0] << std::endl;
    }
    }
}
c++ stl
1个回答
0
投票

我不确定我是否满足您的需求,但是这段代码似乎可以正常工作:

int arr[6] = { 1, 2, 3, 4, 5 };
int pattern[1] = { 4 };
auto it = std::find_end(arr, arr + 5, pattern, pattern + 1);
© www.soinside.com 2019 - 2024. All rights reserved.