将值从递归插入到全局c++集合中
Inserting values into a global C++ set from a recursion
首次提问者。今天早上我意识到,我知道如何通过简单的递归调用来执行感兴趣的任务。问题是全局集合没有被任何调用S.insert(n)所改变。我希望有一种直接的方法来重写它,以便用找到的数字填满集合。那么,问题是,如何做到这一点?
下面是我编写的函数,稍后调用它的片段,以及输出的相关部分。我对来自cerr命令的行完全满意,因此只需将这些值(每行中的第一个和第三个)放入STL集。我对如何做那部分的初步猜测不够好。..............................................................
void insert_primitive_reps(unsigned int a, unsigned int h, unsigned int b, unsigned int M, set<unsigned int> S)
{
cerr << setw(12) << a << setw(12) << h << setw(12) << b << " insert_primitive_reps" << endl;
if ( a <= M )
{
S.insert(a);
if ( b <= M )
{
S.insert(b);
if ( a <= M - b && h <= M - a - b)
{
if( a <= M - a - h ) insert_primitive_reps(a, h + 2 * a, a + b + h, M, S);
if( b <= M - b - h ) insert_primitive_reps(a + b + h, h + 2 * b,b, M, S);
// comment: once a+b+h <= M, min(2a+h, 2b+h) <= M
} // if a + b + h
} // if b
} // if a
} // end insert_primitive_rep
.....................................
set<unsigned int> S;
insert_primitive_reps(1,3,1,100, S);
cout << S.size() << endl;
set<unsigned int>::iterator iterU;
for(iterU = S.begin() ; iterU != S.end() ; ++iterU)
{
unsigned int p = *iterU;
cout << setw(12) << p << Factored(p) << endl;
}
......................................
June 7 2014
1 3 1 insert_primitive_reps
1 5 5 insert_primitive_reps
1 7 11 insert_primitive_reps
1 9 19 insert_primitive_reps
1 11 29 insert_primitive_reps
1 13 41 insert_primitive_reps
1 15 55 insert_primitive_reps
1 17 71 insert_primitive_reps
1 19 89 insert_primitive_reps
55 95 41 insert_primitive_reps
41 69 29 insert_primitive_reps
29 47 19 insert_primitive_reps
95 85 19 insert_primitive_reps
19 29 11 insert_primitive_reps
19 67 59 insert_primitive_reps
59 51 11 insert_primitive_reps
11 15 5 insert_primitive_reps
11 37 31 insert_primitive_reps
11 59 79 insert_primitive_reps
79 99 31 insert_primitive_reps
31 25 5 insert_primitive_reps
31 87 61 insert_primitive_reps
61 35 5 insert_primitive_reps
5 5 1 insert_primitive_reps
5 15 11 insert_primitive_reps
5 25 31 insert_primitive_reps
5 35 61 insert_primitive_reps
61 87 31 insert_primitive_reps
31 37 11 insert_primitive_reps
31 99 79 insert_primitive_reps
79 59 11 insert_primitive_reps
11 7 1 insert_primitive_reps
11 29 19 insert_primitive_reps
11 51 59 insert_primitive_reps
59 67 19 insert_primitive_reps
19 9 1 insert_primitive_reps
19 47 29 insert_primitive_reps
19 85 95 insert_primitive_reps
29 11 1 insert_primitive_reps
29 69 41 insert_primitive_reps
41 13 1 insert_primitive_reps
41 95 55 insert_primitive_reps
55 15 1 insert_primitive_reps
71 17 1 insert_primitive_reps
89 19 1 insert_primitive_reps
S size 0
jagy@phobeusjunior:~$
.........................................
来自朋友的帮助,加上在Deitel和Deitel的书中查找"解引用"的一些提示:
....................................
void insert_primitive_reps(unsigned int a, unsigned int h, unsigned int b, unsigned int M, set<unsigned int> *S)
{
cerr << setw(12) << a << setw(12) << h << setw(12) << b << " insert_primitive_reps" << endl;
if ( a <= M )
{
(*S).insert(a);
if ( b <= M )
{
(*S).insert(b);
if ( a <= M - b && h <= M - a - b)
{
if( a <= M - a - h ) insert_primitive_reps(a, h + 2 * a, a + b + h, M, S);
if( b <= M - b - h ) insert_primitive_reps(a + b + h, h + 2 * b,b, M, S);
// comment: once a+b+h <= M, min(2a+h, 2b+h) <= M
} // if a + b + h
} // if b
} // if a
} // end insert_primitive_rep
...............................
cout << endl << " June 7 2014 " << endl << endl;
set<unsigned int> S;
insert_primitive_reps(1,3,1,100, &S);
cout << " S size " << S.size() << endl;
set<unsigned int>::iterator iterU;
for(iterU = S.begin() ; iterU != S.end() ; ++iterU)
{
unsigned int p = *iterU;
cout << setw(12) << p << Factored(p) << endl;
}
.................................
June 7 2014
1 3 1 insert_primitive_reps
1 5 5 insert_primitive_reps
1 7 11 insert_primitive_reps
1 9 19 insert_primitive_reps
1 11 29 insert_primitive_reps
1 13 41 insert_primitive_reps
1 15 55 insert_primitive_reps
1 17 71 insert_primitive_reps
1 19 89 insert_primitive_reps
55 95 41 insert_primitive_reps
41 69 29 insert_primitive_reps
29 47 19 insert_primitive_reps
95 85 19 insert_primitive_reps
19 29 11 insert_primitive_reps
19 67 59 insert_primitive_reps
59 51 11 insert_primitive_reps
11 15 5 insert_primitive_reps
11 37 31 insert_primitive_reps
11 59 79 insert_primitive_reps
79 99 31 insert_primitive_reps
31 25 5 insert_primitive_reps
31 87 61 insert_primitive_reps
61 35 5 insert_primitive_reps
5 5 1 insert_primitive_reps
5 15 11 insert_primitive_reps
5 25 31 insert_primitive_reps
5 35 61 insert_primitive_reps
61 87 31 insert_primitive_reps
31 37 11 insert_primitive_reps
31 99 79 insert_primitive_reps
79 59 11 insert_primitive_reps
11 7 1 insert_primitive_reps
11 29 19 insert_primitive_reps
11 51 59 insert_primitive_reps
59 67 19 insert_primitive_reps
19 9 1 insert_primitive_reps
19 47 29 insert_primitive_reps
19 85 95 insert_primitive_reps
29 11 1 insert_primitive_reps
29 69 41 insert_primitive_reps
41 13 1 insert_primitive_reps
41 95 55 insert_primitive_reps
55 15 1 insert_primitive_reps
71 17 1 insert_primitive_reps
89 19 1 insert_primitive_reps
S size 14
1 = 1
5 = 5
11 = 11
19 = 19
29 = 29
31 = 31
41 = 41
55 = 5 * 11
59 = 59
61 = 61
71 = 71
79 = 79
89 = 89
95 = 5 * 19
jagy@phobeusjunior:~$
.................................
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何创建一个空的全局类并在启动时实例化它
- 内联函数中具有内部链接的全局变量
- 为什么虚函数不能是静态的和全局的?
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局作用域中函数指针的赋值
- g++用户定义的动态链接库上的全局new和delete运算符
- 在命名空间中使用全局命名空间中的函数
- 全局变量 多读取器 一个写入器多线程安全?
- 类的全局对象和静态成员
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- 如何使用 llvm-10 库在C++定义 LLVM 全局值变量?
- 使用全局声明的向量时,C++双重释放错误/损坏
- 将线程中的数据存储到全局容器的最佳方法?
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面