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

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 閱讀(3091) | 評論 (0)編輯 收藏

     摘要: KMP 算法并非優化 用于實際的字符串查找并不理想.要費勁心血實現和優化它,才能在特定的字符串上略微超過(也可能略微遜過)std::search.
  閱讀全文
posted @ 2010-07-01 21:34 FireEmissary 閱讀(4045) | 評論 (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 閱讀(1573) | 評論 (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 閱讀(2854) | 評論 (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>
            国产亚洲激情| 亚洲日本久久| 久久成年人视频| 性做久久久久久久久| 国产亚洲成精品久久| 久久综合中文字幕| 欧美va亚洲va香蕉在线| 在线视频你懂得一区二区三区| 亚洲精品在线免费| 国产精品久久久久久久久久免费看| 小处雏高清一区二区三区| 校园激情久久| 亚洲精品久久久久久一区二区| 亚洲精品麻豆| 欧美性淫爽ww久久久久无| 欧美一区二区精美| 免费成人美女女| 亚洲亚洲精品三区日韩精品在线视频| 在线亚洲观看| 亚洲电影观看| 亚洲特黄一级片| 亚洲国产成人不卡| 一区二区三区久久| 在线日韩视频| 亚洲专区一区二区三区| 亚洲第一精品夜夜躁人人爽| 亚洲精品视频在线观看网站| 国产亚洲精品bv在线观看| 亚洲福利国产| 国产日韩精品在线| 亚洲精品一区中文| 在线不卡a资源高清| 宅男精品视频| 亚洲三级视频在线观看| 欧美一区二区三区在线观看| 日韩午夜av| 久久精品国产亚洲精品| 亚洲天堂成人在线视频| 久久久久久综合| 午夜精品在线| 欧美日韩亚洲一区二区三区在线| 久久尤物视频| 国产久一道中文一区| 亚洲清纯自拍| 亚洲激情一区二区| 久久精品夜色噜噜亚洲a∨| 亚洲一卡二卡三卡四卡五卡| 免费欧美网站| 欧美91视频| 国产主播一区二区三区| 亚洲一级黄色av| 亚洲性色视频| 欧美日韩亚洲国产一区| 亚洲电影免费观看高清| 在线观看亚洲精品| 久久精品国产亚洲精品| 久久精品在线观看| 国产女人精品视频| 亚洲综合精品自拍| 西瓜成人精品人成网站| 国产精品九九| 亚洲综合色婷婷| 欧美亚洲综合久久| 国产拍揄自揄精品视频麻豆| 亚洲一区二区三区视频播放| 亚洲欧美日韩中文视频| 国产精品久久久999| 亚洲婷婷免费| 久久精品91久久久久久再现| 国产精品色婷婷| 午夜宅男欧美| 美女91精品| 亚洲日韩欧美视频一区| 欧美激情精品久久久六区热门| 亚洲福利专区| 亚洲午夜未删减在线观看| 欧美体内谢she精2性欧美| 一区二区三区你懂的| 亚洲欧美日韩综合| 国产热re99久久6国产精品| 欧美专区在线观看| 欧美激情亚洲一区| 一本色道久久综合亚洲精品高清| 欧美日韩直播| 午夜精品久久久久久久久| 久久一区二区三区国产精品 | 欧美日韩激情网| 一区二区三区精品国产| 久久精品av麻豆的观看方式 | 欧美日韩精品久久| 亚洲一区自拍| 欧美韩日一区| 亚洲欧美精品伊人久久| 好男人免费精品视频| 欧美大学生性色视频| 一区二区三区欧美视频| 久久久久国产精品一区三寸| 91久久线看在观草草青青| 欧美视频在线视频| 久久九九久久九九| 99re6热在线精品视频播放速度| 性欧美精品高清| 亚洲激情在线观看视频免费| 欧美无乱码久久久免费午夜一区| 性欧美长视频| 亚洲精品久久久久| 狂野欧美性猛交xxxx巴西| 亚洲网站在线观看| 在线观看一区视频| 国产精品日本精品| 欧美国产在线观看| 久久精品首页| 亚洲女性裸体视频| 亚洲精品影院在线观看| 免费试看一区| 久久精品日产第一区二区| 一本色道精品久久一区二区三区| 国户精品久久久久久久久久久不卡| 欧美久久九九| 另类天堂av| 欧美在线观看网站| 亚洲性视频h| 日韩视频在线观看国产| 欧美激情导航| 久久综合九色99| 久久av二区| 欧美亚洲视频一区二区| 一区二区免费在线播放| 亚洲娇小video精品| 欧美成人日韩| 噜噜噜噜噜久久久久久91| 欧美在线黄色| 欧美影院久久久| 欧美一区观看| 欧美一区二区精品| 欧美一区二区国产| 香蕉成人伊视频在线观看| 亚洲色图在线视频| 亚洲视频精品| 亚洲欧美中文另类| 亚洲一区国产精品| 亚洲午夜精品一区二区| 一本色道久久综合一区| 99re6热在线精品视频播放速度| 亚洲激情电影在线| 亚洲人成网站色ww在线| 亚洲精品女人| 一本大道久久a久久精二百| 一区二区三区国产精品| 亚洲视频一区二区在线观看| 日韩亚洲视频| 亚洲一区久久久| 午夜精品一区二区三区在线播放| 午夜性色一区二区三区免费视频| 亚洲制服少妇| 欧美在线一二三| 麻豆视频一区二区| 亚洲福利专区| 中文亚洲欧美| 欧美一区二区| 美女国产一区| 欧美视频三区在线播放| 国产欧美精品在线| 伊人精品成人久久综合软件| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲视频一区| 欧美综合国产| 蜜桃久久精品乱码一区二区| 欧美日本三区| 国产欧美日韩高清| 亚洲第一精品电影| 亚洲一区二区三区高清 | 亚洲精品视频免费| 亚洲欧美成人在线| 美女啪啪无遮挡免费久久网站| 最新高清无码专区| 午夜欧美电影在线观看| 欧美大片一区二区三区| 国产精品爽爽ⅴa在线观看| 精品999网站| 亚洲资源在线观看| 欧美国产日韩免费| 亚洲一区二区三区高清不卡| 久久五月婷婷丁香社区| 国产精品久久九九| 亚洲日韩欧美视频一区| 欧美一区久久| 亚洲看片免费| 久久综合中文色婷婷| 国产精品欧美精品| 亚洲美女91| 蜜臀a∨国产成人精品| 亚洲视频一二区| 欧美金8天国| 精品福利电影| 欧美尤物巨大精品爽| 日韩午夜激情电影| 男人的天堂亚洲| 韩日精品在线| 久久久91精品国产一区二区精品|