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