c++ - 如何递归比较 vector ?

标签 c++ loops recursion

我正在尝试编写一个函数,它递归地检查给定 vector A 是否在 vector B 中的任何连续 block 中。例如,如果 A={5,6,7}B={1,2,3,4,5,6,7},它应该返回真。如果 B = {1,2,3,4,5,7,6},它应该返回 false。目前,我的代码一直输出 true 因为我认为我的逻辑不正确。我还不能修改它来产生任何结果。任何帮助将不胜感激!

bool r_app(vector<int>& a1, vector<int> b1, size_t k)
{
    k=0;

    if (a1.size() == 0) {
        cout << "true";
        return true;;
    }

    for (int i=0;i<a1.size();i++){
        for(int j=0;j<b1.size();j++){  
            if (a1.at(i)==b1.at(j)) {
                cout << "true" << endl;
                return true;
            }   
        }
        cout << "false" << endl;
        return false;    

        return r_app(a1,b1,k+1);   
    }
}

编辑: 这就是我从 Smac89 得到的,我添加了 cout 行,这样当我调用 main 中的函数时,它会输出 true 或 false。该函数当前为每个真输入输出真,但不输出假。我不确定为什么。

bool r_app(std::vector<int>& a1, std::vector<int> &b1, std::size_t start)
{
    std::size_t savedPos = start + 1, k = 0;

    for (; k < a1.size() && start < b1.size() && a1[k] == b1[start]; 
         k++, start++)
    {
            if (k != 0 && a1[0] == b1[start])
                savedPos = start;
    }
    if (k == a1.size())
        cout << "true" << endl;
        return true;
    if (start < b1.size())
        return r_app(a1, b1, savedPos);

    cout << "false" << endl;  
    return false;
}

最佳答案

template <typename T>
bool r_app(std::vector<T>& a1, std::vector<T> &b1, std::size_t start) {
    std::size_t savedPos = start + 1, k = 0;

    for (; k < a1.size() && start < b1.size() && a1[k] == b1[start]; 
         k++, start++)
    {
            if (k != 0 && a1[0] == b1[start])
                savedPos = start;
    }
    if (k == a1.size())
        return true;
    if (start < b1.size())
        return r_app(a1, b1, savedPos);

    return false;
}

template <typename T>
bool r_app(std::vector<T>& a1, std::vector<T>& b1) {
    return r_app(a1, b1, 0);
}

例子: http://rextester.com/COR69755

编辑: V2 现在更高效的搜索 - 在上次搜索结束的地方或与搜索字符串开头匹配的字符处开始搜索

您还可以通过查看 savedPos - 1

打印出第一次匹配发生的位置

关于c++ - 如何递归比较 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26353067/

相关文章:

c++ - 非阻塞 getch()

c++ - 如果给定一个 15 位数字,找到下一个回文的最佳方法是什么?

c++ - 动态类型取消引用?

python - 使用涉及列表中某些文件的过程进行循环?

c++ - 在循环内定期调用昂贵的函数

node.js - 如何在递归生成器函数中产生请求?

c++ - 设置小数点前数字的精度?

r - 将 lm() 应用于 R 中 1 个变量的矩阵

perl - 如何防止无限递归(使用 Moose)?

python-3.x - 如何在 python3 中使用 AST 递归简化数学表达式?