如何编写用于查找数组中一系列元素的函数?

时间:2018-05-08 12:19:43

标签: c++ algorithm templates variadic-templates

如何编写用于查找数组中一系列元素的函数?

我编写了一个名为find的函数,用于查找元素是否在数组中。现在我想用find()来查找一系列元素,如果这个数组中存在所有元素,那么函数将返回true或返回false:

template <typename T>
template <typename ...Args>
bool Vector<T>::find(const Args &...args) const {
    std::deque<bool> findDeque;
    findDeque.push_back(this->find(args...));        //The statement will lead to Exception: EXC_BAD_ACCESS (code=2, address=0x...)
    auto begin {findDeque.cbegin()};
    auto end {findDeque.cend()};
    if(begin == end) {
        return false;
    }
    while(begin != end) {
        if(!*begin++) {
            return false;
        }
    }
    return true;
}

我试过了:

findDeque.push_back(this->find(args)...);

...
bool Vector<T>::find(Args &&...args) const {
...
findDeque.push_back(this->find(std::forward<Args>(args)...));
...

也许我研究参数包扩展得很厉害 我应该如何修改功能以使其成功找到。

1 个答案:

答案 0 :(得分:1)

你有无限的递归,因为当你从它自己调用find()时,你永远不会剥离一个参数。递归永远不会接近终止,最终......堆栈溢出!