青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

FireEmissary

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  14 隨筆 :: 0 文章 :: 20 評論 :: 0 Trackbacks

#

我正設計一個布局類,對于托管的對象自動計算更新后的布局位置后調用用戶的回調函數.bind用得非常high,然后最后卻編譯不過.
抽象出來就是如下代碼:
#include <iostream>
#include 
<boost/bind.hpp>
#include 
<boost/function.hpp>
class test1
{
public:
    template
<typename S>
    
double handle(S s)
    {
        s(
1);
        std::cout
<<"test1\n";
        
return 1;
    }
    template
<typename F>
    
void handle1(F f)    {
boost::bind(
&test1::handle<F>,this,f)();//這里
    }

};
class test2
{
public:
    
double handle(int i)
    {
        std::cout
<<"test2\n";
        
return i;
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    test2 t2;
    test1 t1;

    t1.handle1(boost::bind(
&test2::handle,t2,_1));
    
return 0;
}
原來,bind為了支持
boost::bind(  std::logical_and<bool>(),     boost::bind(std::greater<int>(),_1,5),   boost::bind(std::less_equal<int>(),_1,10));
這類操作,內部自動對bind_t(即bind的返回類型)調用取得結果來作參數.代價就是不能把bind_t作為參數了.解決方法是,boost::ref包起來
boost::bind(&test1::handle<F>,this,boost::ref(f))();

boost user mail list有人建議
boost::bind(&test1::handle<boost::_bi::protected_bind_t<F>
>,this, protect(f))();
不過我認為用戶還是別去接觸boost::_bi空間來的好


另一件事是:bind返回的對象支持多于它本該支持的參數.同樣上面的例子,改為
boost::bind(&test1::handle<F>,this,boost::ref(f))(1,2,3,4,5);
照樣編譯通過.帶來的好處就是像boost::asio這樣的庫接受的回調可以很靈活,你要不要boost::system::error_code,bytes_transferred都沒問題.asio::io_service總是壓入所有必須的參數來進行回調,而被bind后的回調對象會只抽取自己必須的參數.

posted @ 2011-03-16 12:56 FireEmissary 閱讀(3087) | 評論 (0)編輯 收藏

     摘要: KMP 算法并非優化 用于實際的字符串查找并不理想.要費勁心血實現和優化它,才能在特定的字符串上略微超過(也可能略微遜過)std::search.
  閱讀全文
posted @ 2010-07-01 21:34 FireEmissary 閱讀(4043) | 評論 (2)編輯 收藏

3.0以后的opengl引入了廢棄模式和profile定義.其中core profile上下文不支持被廢棄的函數.
freeglut支持兼容模式指定:
glutInitContextVersion指定版本
glutInitContextFlags指定是否向后兼容.
glutInitContextProfile指定profile是否core的.

freeglut自帶的例子smooth_opengl3把glutInitContextVersion指定參數GLUT_FORWARD_COMPATIBLE,windows平臺映射到wgl的WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB標記.而WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB標記的意思是"向前"兼容,也就是說不支持廢棄的函數.
這樣smooth_opengl3編譯出來的例子出現gl錯誤,什么顯示都沒有.

解決方案是注釋掉glutInitContextFlags調用,因為默認上下文就是以兼容模式建立.
glutInitContextProfile請求opengl 3.2以上版本才有效果,通常可以不管它.
posted @ 2010-06-20 18:21 FireEmissary 閱讀(1572) | 評論 (0)編輯 收藏

 

經典的求公共子序列算法需要兩個序列的長度已知.而且通常用于計算字符串的公共子序列.

我實現的算法針對原有的算法輸入需求解耦合,使得算法極度可適配.能用于字符串公共子序列計算和文件diff計算.理論上能用于任何具備相似特征的兩個序列的公共子序列計算.

LCS_Calculate有三個變種:

 

template<typename L_Iterator,typename R_Iterator,typename Container>

LCS_Size FEtool::LCS_Calculate(L_Iterator lbeg,L_Iterator lend,  R_Iterator rbeg,R_Iterator rend,Container 
&out);

template
<typename L_Iterator,typename R_Container,typename Container>

inline LCS_Size FEtool::LCS_Calculate(L_Iterator lbeg,L_Iterator lend,  R_Container 
const&rcontainer, Container &out);

template
<typename L_Container,typename R_Container,typename Container>

inline LCS_Size FEtool::LCS_Calculate(L_Container 
const& lcontainer,   R_Container const&rcontainer, Container &out);

L_Iterator接受輸入迭代器. R_Iterator接受隨機迭代器. L_ContainerR_Container分別調用它們的begin()end()方法轉調用到LCS_Calculate的第一個版本.

L_*打頭的指代比較序列中左邊那個,R_*打頭的指代比較序列中右邊那個.

最后一個參數Container&out接收一個容器用來輸出序列各段相同的地方.典型的Container參數為std::deque<FEtool::SectionCommon> section;也可以為FEtool:: EmptyContainer.

class EmptyContainer
{
public:
    
void push_back(SectionCommon const&){};
    LCS_Size size()
{return 0;}
    
void clear(){}
}
;


如果為FEtool:: EmptyContainer參數則通過模板特化代碼選擇不計算兩段序列的相同部分。

 

struct LCS_Compare_Trait
{
template
<typename L,typename R>
static   bool equal(L const& left, R const& right)
        
{
            
return left==right;
        }

}
;

定義了比較算法,默認用operator==.你可以在FEtool空間通過特化或偏特化LCS_Compare_Trait:: equal來定制它.

 

struct SectionCommon
{
    LCS_Size L_begin;
    LCS_Size R_begin;
    LCS_Size count;
    
void clear(){L_begin=0;R_begin=0;count=0;}
}
;

指示兩個序列的相同部分. 比如SectionCommon:: L_begin0, SectionCommon:: R_begin10, SectionCommon::count5.就表示左邊序列從0開始的5個數據,和右邊序列從10開始的5個數據都相同.

 

LCS_Calculate內部根據傳入參數優化實現.經過對經典的動態規劃解公共子序列算法的考察發現,外圍那個循環只需要遍歷它代表的序列一次;即左邊序列則滿足輸入迭代器即可.它要求右邊序列始終是傳入隨機迭代器.內部計算用到的數組使用了滾動數組(LCSArray)實現,空間占用為右邊序列長度*2.


LCS_Calculate
的最后一個參數不為EmptyContainer則會計算公共子序列在左右序列中各段的順序和長度.這里L_Iterator是不是隨機訪問迭代器就會影響到性能了.L_Iterator不是隨機迭代器內部就會用到一個動態增長的輔助數組(TrackArrayDynamic)來做回溯; L_Iterator是隨機迭代器則直接一次申請(左序列*右序列)這么大的空間(TrackArrayStatic)來輔助回溯計算.
而如果LCS_Calculate的最后一個參數為EmptyContainer則會選擇一個空數組(TrackArrayEmpty)實現.TrackArrayEmpty類把所有操作展開為空操作.

所有這些,基于模板來自動選擇.用戶不需要指定不同的函數來優化性能:

template<typename L_Iterator,typename R_Iterator,typename Container/*vector<LCS_Section>*/>
LCS_Size LCS_Calculate(L_Iterator lbeg,L_Iterator lend,
                    R_Iterator rbeg,R_Iterator rend,
                    Container 
&out)
{
    
out.clear();
    detail::LCSArray array(rend
-rbeg);
   typedef detail::SelectTrackArray
<Container,typename std::iterator_traits<L_Iterator>::iterator_category> SelectTrack;//選擇適當的回溯數組
   typename SelectTrack::Array trackArr(SelectTrack::TotalRows(lbeg,lend),array.columns());//選擇適當的回溯數組
    LCS_Size leftSize;
    LCS_Size rightSize;
  
for( leftSize=1;lbeg!=lend;++lbeg,++leftSize)//外層只需要是輸入迭代器就可
        
for( rightSize=1;rightSize<=array.columns();++rightSize)
        
{
            
if(LCS_Compare_Trait::equal(*lbeg,*(rbeg+rightSize-1))){
                array(leftSize,rightSize)
=array(leftSize-1,rightSize-1)+1;
                trackArr(leftSize,rightSize)
=0;
            }

            
else if(array(leftSize-1,rightSize)>=array(leftSize,rightSize-1)){
                array(leftSize,rightSize)
=array(leftSize-1,rightSize);
                trackArr(leftSize,rightSize)
=1;
            }

            
else{
                array(leftSize,rightSize)
=array(leftSize,rightSize-1);
                trackArr(leftSize,rightSize)
=-1;
            }


        }

        detail::LCS_KeepTrack(trackArr,
out);

    
return array(leftSize-1,array.columns());

}


完整代碼包括測試代碼下載

posted @ 2010-03-27 19:31 FireEmissary 閱讀(2852) | 評論 (1)編輯 收藏

僅列出標題
共2頁: 1 2 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品视频免费| 欧美国产日韩一区二区三区| 欧美日韩的一区二区| 日韩午夜电影av| 日韩视频免费在线| 国产精品成人观看视频国产奇米| 亚洲一区二区三区欧美| 亚洲一区二区三区乱码aⅴ| 国产精品一区二区三区观看 | 欧美精品日本| 亚洲婷婷免费| 午夜精品久久久久久久白皮肤| 国产欧美韩国高清| 欧美第一黄网免费网站| 欧美日韩日本视频| 久久九九久久九九| 欧美激情精品久久久久久大尺度| 亚洲图片欧洲图片日韩av| 亚洲欧美资源在线| 亚洲国产精彩中文乱码av在线播放| 欧美黄色免费| 国产精品大全| 欧美电影在线| 国产精品久久久一区麻豆最新章节 | 国产精品久久久久久亚洲调教 | 久久久人成影片一区二区三区观看| 久久福利视频导航| 在线视频欧美一区| 久久精品观看| 亚洲素人在线| 久久综合久久综合这里只有精品| 一级成人国产| 久久综合色一综合色88| 亚洲欧美日韩电影| 欧美激情自拍| 久久夜色精品一区| 国产精品久久久久999| 美日韩精品免费| 国产精品一区久久久| 亚洲福利小视频| 国产午夜精品理论片a级探花 | 99亚洲一区二区| 亚洲高清久久久| 午夜精品视频在线观看| 亚洲免费激情| 美女久久一区| 久久一区中文字幕| 国产欧美日本| 一区二区电影免费观看| 亚洲免费黄色| 免费在线观看一区二区| 久久综合色8888| 国产精品网站在线播放| 一本久久综合亚洲鲁鲁| 亚洲精选视频在线| 久久永久免费| 乱人伦精品视频在线观看| 国产日产高清欧美一区二区三区| 一区二区三区**美女毛片| 亚洲视频导航| 欧美日韩亚洲高清| 亚洲免费观看高清完整版在线观看熊 | 在线播放视频一区| 久久精品国产99国产精品澳门| 羞羞视频在线观看欧美| 看欧美日韩国产| 国产一区二区视频在线观看 | 久久嫩草精品久久久久| 国产欧美日本| 亚洲欧美综合另类中字| 先锋资源久久| 国产精品午夜av在线| 亚洲欧美第一页| 欧美在线观看网站| 国产日韩欧美综合一区| 小嫩嫩精品导航| 久久久中精品2020中文| 在线观看91久久久久久| 久久久蜜桃一区二区人| 欧美jjzz| aa级大片欧美| 国产精品久久久久国产a级| 亚洲一区二区三区欧美| 欧美怡红院视频一区二区三区| 国产精品免费看片| 欧美一二三区精品| 久久中文欧美| 亚洲精品视频在线| 国产精品二区三区四区| 午夜精品视频在线| 欧美成人午夜剧场免费观看| 夜夜嗨av一区二区三区四区 | 久久欧美中文字幕| 亚洲电影中文字幕| 亚洲一区二区三区激情| 国产欧美日韩三级| 久久亚洲视频| 一区二区三区欧美成人| 久久久久一区二区三区| 亚洲精品视频在线观看免费| 国产精品剧情在线亚洲| 久久精品一区四区| 亚洲毛片网站| 久久精品亚洲| 亚洲精选国产| 国产综合一区二区| 欧美日韩色婷婷| 欧美一区免费视频| 亚洲日韩中文字幕在线播放| 欧美伊人影院| 中文高清一区| 亚洲国产天堂久久综合网| 国产精品久久国产三级国电话系列 | 免费亚洲电影| 欧美一级免费视频| 日韩一级黄色大片| 韩国av一区二区三区| 欧美特黄一区| 麻豆成人在线播放| 午夜精品视频在线观看一区二区| 最新国产拍偷乱拍精品| 久久午夜羞羞影院免费观看| 亚洲亚洲精品在线观看| 亚洲高清二区| 韩国精品一区二区三区| 国产精品亚发布| 欧美日韩精品久久| 毛片一区二区三区| 久久免费视频一区| 欧美一区二区三区精品| 亚洲特级片在线| 亚洲精选中文字幕| 亚洲精品1区| 亚洲国产精品www| 欧美.www| 久久久青草婷婷精品综合日韩 | 亚洲一品av免费观看| 亚洲精品国产精品乱码不99| 樱桃成人精品视频在线播放| 国产一区二区久久久| 国产精品日日做人人爱| 国产精品久久福利| 欧美日韩一区二| 欧美性感一类影片在线播放| 欧美久久久久久久久| 欧美激情五月| 欧美日韩理论| 欧美视频一区在线观看| 欧美日韩国产色站一区二区三区| 欧美国产亚洲另类动漫| 欧美成人自拍视频| 欧美激情中文字幕乱码免费| 欧美精品三级| 国产精品观看| 国产日韩一区欧美| 激情成人在线视频| 在线免费观看日本欧美| 亚洲日本欧美| 亚洲一区在线免费| 欧美一区二区三区视频在线| 久久久亚洲国产天美传媒修理工| 免费91麻豆精品国产自产在线观看| 久久综合色影院| 91久久在线观看| 亚洲天堂av综合网| 欧美专区中文字幕| 麻豆91精品| 欧美日韩午夜在线| 国产欧美在线| 亚洲国产小视频在线观看| 亚洲色图在线视频| 久久久久久自在自线| 欧美激情中文不卡| 中国女人久久久| 久久天天躁狠狠躁夜夜av| 欧美精彩视频一区二区三区| 国产精品自拍在线| 91久久综合亚洲鲁鲁五月天| 亚洲欧美另类中文字幕| 老司机免费视频久久| 夜色激情一区二区| 久久久久久成人| 欧美日韩亚洲综合在线| 国产一区二区三区在线观看网站| 亚洲另类在线视频| 欧美一区二区精品久久911| 欧美激情一区二区三区在线视频观看 | 性久久久久久久久久久久| 欧美91大片| 亚洲欧美日韩国产| 欧美日韩成人| 一区二区在线看| 亚洲欧美中文日韩v在线观看| 欧美成人中文| 亚洲欧美自拍偷拍| 欧美丝袜第一区| 亚洲日本电影在线| 久久在线免费观看| 亚洲欧美清纯在线制服| 欧美激情一区|