Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全组合算法及求解C++;问题 在这里有人觉得他们对C++的理解是否深入,初学者,是的,我可以在21天内通过C++来完成工作,OO章节可以很小。几年前,我曾断断续续地学习VB6作为一种业余爱好,但当您开始使用任何大于微小tbh的代码库时,问题显然就出现了。代码库越大,OO方面就变得非常令人望而生畏,试图与您实际正在做的事情保持联系_C++ - Fatal编程技术网

全组合算法及求解C++;问题 在这里有人觉得他们对C++的理解是否深入,初学者,是的,我可以在21天内通过C++来完成工作,OO章节可以很小。几年前,我曾断断续续地学习VB6作为一种业余爱好,但当您开始使用任何大于微小tbh的代码库时,问题显然就出现了。代码库越大,OO方面就变得非常令人望而生畏,试图与您实际正在做的事情保持联系

全组合算法及求解C++;问题 在这里有人觉得他们对C++的理解是否深入,初学者,是的,我可以在21天内通过C++来完成工作,OO章节可以很小。几年前,我曾断断续续地学习VB6作为一种业余爱好,但当您开始使用任何大于微小tbh的代码库时,问题显然就出现了。代码库越大,OO方面就变得非常令人望而生畏,试图与您实际正在做的事情保持联系,c++,C++,另一个问题,我在VB6中学到的(程度较低),是解决问题/算法总是有多种方法,关键是效率(速度+无bug代码)。在代码中拼凑解决方案是一回事,为更大的代码库编写复杂、高质量、智能、高效的代码则是另一回事。也许我应该试试c#/VB 以一个基本问题为例 编写一个算法,输出给定字符集的每个组合,最多N个组合。这样说[0-9][N=3] 000 001 002 ... 111 112 113 ... 999 不是独特的烫发,而是所有的梳子 正如我所说,必须有很多方法来实现,C++和C++风格的字符数组、指

另一个问题,我在VB6中学到的(程度较低),是解决问题/算法总是有多种方法,关键是效率(速度+无bug代码)。在代码中拼凑解决方案是一回事,为更大的代码库编写复杂、高质量、智能、高效的代码则是另一回事。也许我应该试试c#/VB

以一个基本问题为例

  • 编写一个算法,输出给定字符集的每个组合,最多N个组合。这样说[0-9][N=3] 000 001 002 ... 111 112 113 ... 999
  • 不是独特的烫发,而是所有的梳子

    正如我所说,必须有很多方法来实现,C++和C++风格的字符数组、指针和递归,或者使用SL或STL库的一些功能,如动态数组/向量/映射或模板以及SL/STL中可用的任何其他工具,如NExtx置换等。 除了使用数组来解决这个问题的C风格算法本身可能是一个令人头疼的问题之外,您还需要考虑是否使用其他库函数,这是解决这个问题最有效的方法

    这是我非常有技巧的尝试,首先我不使用指针,其次我不能在不使用多个混乱的for/switch循环的情况下实现N个组合

    所以我已经为[0-9]和这个集合的3个组合硬编码了这个,现在它确实在一定程度上起作用了,但是最后它奇怪地跨过了条件集合(显然)并添加了另外10行组合。在本例中,“j”到10,其中j=10在数组中为NULL,因此为NULL空间,如图所示。您将看到是否运行该程序。 00 01 02 03 04 05 06 07 08 09

    我还使用了全局变量,我想我真的应该用指针来代替

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    void recurse_array(int N, char c_arr[]);
    
    int j = 0;
    int k = 0;
    int i = 0;
    ofstream myfile;
    
    int main()
    {
        int N;
        myfile.open("data.txt");
        cout << "Enter number N combos ";
        cin >> N;
        char c_arr[11] = "0123456789";
        recurse_array(N, c_arr);
    }
    
    void recurse_array(int N, char c_arr[])
    {
        for (i = 0; i < 10; i++) { // Why does sizeof not work when array is passed to function
            myfile << c_arr[j] << c_arr[k] << c_arr[i] << endl; //Expand << c_arr[x] to N times ??
        }
        while ((j < 10)) { // Why does j still = 10 at end for 10 more rows.
            if ((k == 9) && (i == 10)) { // why is i 10 and not 9????
                k = 0;
                j++;
                recurse_array(N, c_arr);
            } else {
                k++;
                recurse_array(N, c_arr);
            }
        }
    }
    
    #包括
    #包括
    使用名称空间std;
    无效递归数组(int N,char c_arr[]);
    int j=0;
    int k=0;
    int i=0;
    流文件;
    int main()
    {
    int N;
    myfile.open(“data.txt”);
    cout>N;
    字符c_arr[11]=“0123456789”;
    递归数组(N,c_arr);
    }
    无效递归数组(int N,char c_arr[])
    {
    对于(i=0;i<10;i++){//当数组传递给函数时,为什么sizeof不起作用
    我的文件
    当数组传递给函数时,为什么sizeof不起作用

    为什么j在最后仍然=10,再多行10行

    您将j声明为全局变量并将其初始化为0,然后仅当它小于10时才对其进行递增。在前10行之后,它将为10,并保持为10,因为您没有更改它。也许您希望j成为递归数组中的局部变量

    为什么我是10而不是9

    当i<10时,您的for循环为循环

    for (i = 0; i < 10; i++) { // Why does sizeof not work when array is passed to function
        myfile << c_arr[j] << c_arr[k] << c_arr[i] << endl; //Expand << c_arr[x] to N times ??
    }
    
    for(i=0;i<10;i++){//当数组传递给函数时,为什么sizeof不起作用
    myfile我会这样做:

    #include <iostream>
    #include <vector>
    
    bool increment(std::vector<int>& v, int maxSize)
    {
        for (auto it = v.rbegin(); it != v.rend(); ++it) {
            ++*it;
            if (*it != maxSize) {
                return true;
            }
            *it = 0;
        }
        return false;
    }
    
    template <int N>
    void display(const std::vector<int>& v, const char (&digits)[N])
    {
        for (auto elem : v) {
            std::cout << digits[elem];
        }
        std::cout << std::endl;
    }
    
    template <int N>
    void display_combinaison(int count, const char (&digits)[N])
    {
        std::vector<int> v(count);
    
        do {
            display(v, digits);
        } while (increment(v, N - 1));
    }
    
    int main(int argc, char *argv[])
    {
        display_combinaison(3, "0123456789");
    
        return 0;
    }
    
    所以
    sizeof(a)==11*sizeof(int)
    (注意
    sizeof(int)!=1
    ) 因此
    11==sizeof(a)==sizeof(*a)

    为了通用,您可以使用模板:

    template <int N>
    void function(int (&a)[N])
    
    模板
    无效函数(int&a)[N])
    
    因此,它可以接受任何固定大小的数组。 注意,我们有N,因此不需要使用
    sizeof(a)


    <>但是最简单的方法是拥有<代码>空洞函数(int *a,un签署int size)< /Calp>

    对于C++,C++代码看起来更像是“让我们在这里和那里放一点CPP特征”。另外,C++是一种多范例语言,我认为没有一个可行的答案……通常是“好的实践”。随着C++标准的每一次修改,即良好的C++ 11可能是非常糟糕的C++ 98……“初学者,是的,我可以在21天内通过C++学习”C++不是你在21天内学到的东西。我在编程过程中已经专业化了17年,我写了100万行C++代码,我还有很多要学习的地方。
    template <int N>
    void function(int (&a)[N])