0
点赞
收藏
分享

微信扫一扫

c++按序或位分串2

 位序串{
< I> 后面(&a,&s){s=a.子串(I);}
< =0, P, Q> 前面(&a,&s){
常式(){s=a.子串(P,Q);}
{s=a.子串(P,Q-P);}
}
};//通过构中的模板函数来实现动作.

< =0, M, P, F, S>
前动作(F&a,序列<P>b,S&s){M::后面<P>(a,s);}
< , P, Q>常式 首序(){
常式()(P+Q); Q;
}//按位,首序为P+Q,按序,直接为Q.

< , M, P, Q,...I, F, S,...T>
前动作(F&a,序列<P,Q,I...>b,S&s,T&...t){
M::前面<,P,Q>(a,s);
常式 W=首序<,P,Q>();//首位.
前动作<,M>(a,序列<W,I...>(),t...);
}//这是递归.

< =1,...I,串类...T>
位序分(&a,序列<I...>,T&...t){
常式 M=型长...(I),N=型长...(T);
断定(M+1==N,"要求无0及大小");
常式 e=序列<0,I...>();
前动作<,位序串>(a,e,t...);
}//分的是串.

(){
a{"344666455533444"},b,c,d,e;
//位序分(a,序列<3,2,4>(),b,c,d,e);
位序分<1>(a,序列<3,2,4>(),b,c,d,e);
打印(b,c,d,e);
位序分<0>(a,序列<3,4,11>(),b,c,d,e);
打印(b,c,d,e);
}

这里的经验有:可以通过​​构​​​来转移​​模板参数​​​的推导.把​​函数​​​放在​​构​​​中.这样,直接在​​模板函数​​​中写​​M​​​就可以了.
这里​​​前动作​​​中​​前面​​​和​​后面​​​代码不一样.加上​​递归​​​,递归时最后归不回来,要单独写​​最后​​​代码.
还有,​​​按序与按位​​​的​​序列​​​变化是不一样的.
​前面代码


举报

相关推荐

0 条评论