由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请问遇到如下情况怎么进行抽象
相关主题
类成员函数调用其它函数functional programming lang里面 如果我说以後会大面积火的,还是lisp (clojure)
问个Python的问题A C++ private member function problem
请教一个程序调用的内存问题 (转载)VC++ release VS debug
面试问题请问static variable init的问题?
请教c++数组初始化一个 default constructor 的问题
monad抽象程度有点高In C++, how to do matrix computation?
C++里 variable declaration 有什么用?c++里面caveats太多了
请教一个编程问题为啥指针读出的数值十分巨大或者十分小?
相关话题的讨论汇总
话题: int话题: vars话题: 循环话题: init话题: 变量
进入Programming版参与讨论
1 (共1页)
s****a
发帖数: 238
1
现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得
事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该
有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数
指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道
这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。
g*****g
发帖数: 34805
2
写个虚函数的类,让子类实现这个虚函数,然后把这个类
传进你的循环体类。嫌一个个传递不优雅,写个简单的数据
类包起来。

【在 s****a 的大作中提到】
: 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得
: 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该
: 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数
: 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道
: 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。

t****t
发帖数: 6806
3
use lambda function if your compiler supports it.

【在 s****a 的大作中提到】
: 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得
: 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该
: 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数
: 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道
: 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。

X****r
发帖数: 3557
4
反过来做,把循环本身改变的变量们打成一包(数目不多的话都可以直接操作),
用类似iterator的方法来遍历循环,比如
for (int i = 0; i < 100; ++i) {
for (int j = 0; j < i/2; ++j) {
for (int k = 0; k < i-j; ++k) {
// do something about i, j, k and other variables
}
}
}
就变成:
int i, j, k;
init_vars(i, j, k);
do {
// do something about i, j, k and other variables
} while (next_vars(i, j, k));
void init_vars(int& i, int& j, int& k) {
i = 0;
j = 0;
k = 0;
}
bool next_vars(int& i, int& j, int& k) {
if (++k >= i-j) {
k = 0;
if (++j >= i/2) {
j = 0;
if (++i >= 100) {
i = 0;
return false;
}
}
}
return true;
}
这样init_vars和next_vars就可以被重复使用,哪怕循环中间做的事情所要用到
的其他变量完全不相干也没有关系。

【在 s****a 的大作中提到】
: 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得
: 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该
: 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数
: 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道
: 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。

c****p
发帖数: 6474
5
需要传的变量弄成全局的?

【在 s****a 的大作中提到】
: 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得
: 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该
: 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数
: 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道
: 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。

a****l
发帖数: 8211
6
我的看法是,如果这些东西不是肯定一样的话,最好不要放在一起.因为如果是没有理由
一样的东西,就算现在看上去一样,以后肯定会变的不一样.然后过程中维护的人会加一
堆的if,然后左一个条件右一个条件,弄不好还冲突,然后整个过程是一团粥,然后受不了
了只能再去分开,分开的过程又是一见麻烦事.

【在 s****a 的大作中提到】
: 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得
: 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该
: 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数
: 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道
: 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。

g****y
发帖数: 436
7
大牛

【在 X****r 的大作中提到】
: 反过来做,把循环本身改变的变量们打成一包(数目不多的话都可以直接操作),
: 用类似iterator的方法来遍历循环,比如
: for (int i = 0; i < 100; ++i) {
: for (int j = 0; j < i/2; ++j) {
: for (int k = 0; k < i-j; ++k) {
: // do something about i, j, k and other variables
: }
: }
: }
: 就变成:

g*******e
发帖数: 3013
8
好象看起来很复杂,建议用javascript。 ;)

【在 s****a 的大作中提到】
: 现在在写的一个程序在好几处要用到一个比较复杂的嵌套的循环,区别在于循环里做得
: 事情不一样,暂时只有靠拷贝黏贴代码,但这样对将来维护肯定是不利的,总觉得应该
: 有什么办法把它抽象出来。想过仿照stl的for_each这样写个函数,把循环体当作函数
: 指针传给它,但是中间要用到很多外部函数体的变量,一个个传递也很不优雅,不知道
: 这种问题一般怎么处理,我用的是C++,如果别的语言有这样的特性也请介绍一下。

s****a
发帖数: 238
9
太谢谢了,这个方法很好,并行化也很方便

【在 X****r 的大作中提到】
: 反过来做,把循环本身改变的变量们打成一包(数目不多的话都可以直接操作),
: 用类似iterator的方法来遍历循环,比如
: for (int i = 0; i < 100; ++i) {
: for (int j = 0; j < i/2; ++j) {
: for (int k = 0; k < i-j; ++k) {
: // do something about i, j, k and other variables
: }
: }
: }
: 就变成:

s****a
发帖数: 238
10
谢谢你提供的思路,还是很清晰的,不过对代码结构要求比较大的改动。java中可能更
好用

【在 g*****g 的大作中提到】
: 写个虚函数的类,让子类实现这个虚函数,然后把这个类
: 传进你的循环体类。嫌一个个传递不优雅,写个简单的数据
: 类包起来。

s****a
发帖数: 238
11
能稍微展开说说吗?比如哪个库里有?

【在 t****t 的大作中提到】
: use lambda function if your compiler supports it.
t****t
发帖数: 6806
12
google c++0x lambda
gcc 4.6+ support it.

【在 s****a 的大作中提到】
: 能稍微展开说说吗?比如哪个库里有?
1 (共1页)
进入Programming版参与讨论
相关主题
为啥指针读出的数值十分巨大或者十分小?请教c++数组初始化
[分享]:一篇文章讲通一半Java《面向对象一家人》monad抽象程度有点高
Python and C/C++ QuestionC++里 variable declaration 有什么用?
受不了python了请教一个编程问题
类成员函数调用其它函数functional programming lang里面 如果我说以後会大面积火的,还是lisp (clojure)
问个Python的问题A C++ private member function problem
请教一个程序调用的内存问题 (转载)VC++ release VS debug
面试问题请问static variable init的问题?
相关话题的讨论汇总
话题: int话题: vars话题: 循环话题: init话题: 变量