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

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

     摘要: KMP 算法并非優化 用于實際的字符串查找并不理想.要費勁心血實現和優化它,才能在特定的字符串上略微超過(也可能略微遜過)std::search.
  閱讀全文
posted @ 2010-07-01 21:34 FireEmissary 閱讀(4036) | 評論 (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 閱讀(1568) | 評論 (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 閱讀(2844) | 評論 (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成人毛片| 亚洲激情亚洲| 欧美成人一区二区三区在线观看 | 99视频国产精品免费观看| 亚洲国产91| aa国产精品| 国产精品99久久久久久白浆小说| 亚洲网在线观看| 午夜精品三级视频福利| 久久久www| 亚洲福利久久| 最新日韩精品| 在线综合视频| 久久久久久久综合日本| 欧美精品v日韩精品v国产精品| 欧美性猛交一区二区三区精品| 国产欧美日韩激情| 亚洲精品视频在线观看网站| 亚洲图片你懂的| 美女尤物久久精品| 亚洲制服少妇| 欧美久久99| 国语精品一区| 亚洲尤物视频在线| 亚洲第一区在线观看| 亚洲视频一区二区| 欧美va天堂在线| 国产一区二区三区高清播放| 亚洲免费成人| 久久久女女女女999久久| 最近中文字幕mv在线一区二区三区四区| 欧美一级在线播放| 欧美jjzz| 国产精品一区毛片| 在线观看日韩www视频免费| 亚洲欧美日韩国产中文| 欧美不卡一卡二卡免费版| 亚洲免费视频在线观看| 欧美激情精品久久久久久大尺度| 国产午夜精品久久| 亚洲免费在线电影| 91久久极品少妇xxxxⅹ软件| 久久精品人人爽| 国产精品一二一区| 亚洲与欧洲av电影| 在线一区二区三区做爰视频网站| 欧美a级一区二区| 国产一区二区三区在线观看网站| 亚洲综合欧美日韩| 中文成人激情娱乐网| 欧美精品激情在线| 亚洲日本中文字幕| 亚洲国产欧美精品| 老司机精品福利视频| 伊人久久综合97精品| 久久精品国产第一区二区三区| 99精品欧美一区二区三区综合在线 | 国产精品毛片高清在线完整版| 亚洲国产精品va在看黑人| 欧美一二三视频| 亚洲与欧洲av电影| 国产精品v欧美精品v日韩精品| 中文无字幕一区二区三区| 亚洲黄色av一区| 欧美精品一线| 亚洲中字黄色| 亚洲欧美经典视频| 国产亚洲精品bt天堂精选| 午夜欧美理论片| 午夜精品电影| 加勒比av一区二区| 亚洲第一精品福利| 欧美色偷偷大香| 亚洲专区一区二区三区| 在线视频中文亚洲| 国内在线观看一区二区三区| 久久综合综合久久综合| 欧美黄色精品| 午夜精品久久久久久久 | 国产精品成人v| 香蕉免费一区二区三区在线观看| 午夜伦理片一区| 亚洲国产精品电影在线观看| 亚洲精品一区中文| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲国产欧美另类丝袜| 亚洲福利精品| 国产精品国产三级国产普通话三级 | 国产亚洲aⅴaaaaaa毛片| 免费一级欧美在线大片| 欧美日韩岛国| 久久国产精品网站| 欧美高清成人| 久久精品一区| 欧美三日本三级少妇三2023| 久久精品亚洲热| 欧美精品日韩综合在线| 久久se精品一区精品二区| 欧美电影打屁股sp| 午夜天堂精品久久久久| 免费一区视频| 久久xxxx| 欧美三级在线视频| 欧美aaa级| 国产拍揄自揄精品视频麻豆| 亚洲精品美女在线观看播放| 黄色精品一区| 亚洲无人区一区| 一区二区三区精品视频| 久久久久久久综合狠狠综合| 欧美亚洲色图校园春色| 欧美精品色一区二区三区| 老司机成人网| 国产一本一道久久香蕉| 亚洲一区二区三区三| 日韩网站在线| 免费视频最近日韩| 欧美岛国激情| 国内精品**久久毛片app| 亚洲一区黄色| 亚洲午夜一二三区视频| 欧美高清hd18日本| 欧美电影免费观看| 国产日韩av高清| 亚洲网站啪啪| 亚洲综合第一| 欧美色欧美亚洲另类七区| 亚洲精品日韩久久| 日韩亚洲欧美精品| 免费亚洲电影在线观看| 免费的成人av| 亚洲国产婷婷香蕉久久久久久99 | 国产精品久久久久久久久动漫| 免费成人av资源网| 怡红院精品视频| 久久男人资源视频| 免费在线观看精品| 最新成人av在线| 老司机亚洲精品| 欧美激情二区三区| 亚洲美女色禁图| 欧美日韩色一区| 99亚洲视频| 亚洲欧美在线视频观看| 亚洲精品在线免费| 国产精品久久毛片a| 中文在线资源观看视频网站免费不卡| 亚洲最新在线视频| 欧美三级午夜理伦三级中视频| 一区二区精品国产| 欧美亚洲视频在线看网址| 国产日韩欧美电影在线观看| 欧美影视一区| 亚洲国产精彩中文乱码av在线播放| 亚洲国产老妈| 欧美日韩国产二区| 午夜精品久久99蜜桃的功能介绍| 巨乳诱惑日韩免费av| 亚洲区国产区| 欧美日韩激情网| 亚洲欧美成人网| 欧美a级片网站| 国产精品99久久久久久久久| 国产精品三级视频| 久久九九国产| 亚洲精品三级| 美女福利精品视频| 99精品热视频| 国产日产精品一区二区三区四区的观看方式 | 亚洲视频一二三| 免费亚洲一区二区| 亚洲一区二区三区影院| 国模叶桐国产精品一区| 欧美成人国产va精品日本一级| 在线视频一区观看| 欧美jizzhd精品欧美喷水| 亚洲视频在线观看| 亚洲黄色av| 国产日韩一区二区三区在线| 欧美日韩成人激情| 久久青草久久| 亚洲尤物精选| 亚洲激情视频| 美玉足脚交一区二区三区图片| 在线性视频日韩欧美| 亚洲国产精品成人| 国产一区二区久久| 欧美午夜电影在线| 免费观看久久久4p| 欧美一区二区三区在线观看| 99re6热只有精品免费观看 | 欧美日韩国产精品一区| 欧美在线视频免费观看| 中国女人久久久| 亚洲三级影院| 欧美xxxx在线观看| 久久午夜av| 久久久夜精品| 久久天天综合| 美日韩精品免费|