我發現... 現在的業務量真的很難讓我每天一更又要維持原本的生活, 嘖嘖, 不過不得不說, 自從開始用這個方式後, 真的能夠比較快速的進入醒腦狀態... 比喝咖啡還有效; 而這一次的題目是Linklist, 話說我也好久沒有用到這個東西, 說真的自從各種像是vector, map, stack 出來後, 對於linklist的需求好像就越來越少了;
我發現... 現在的業務量真的很難讓我每天一更又要維持原本的生活, 嘖嘖, 不過不得不說, 自從開始用這個方式後, 真的能夠比較快速的進入醒腦狀態... 比喝咖啡還有效; 而這一次的題目是Linklist, 話說我也好久沒有用到這個東西, 說真的自從各種像是vector, map, stack 出來後, 對於linklist的需求好像就越來越少了;
剛剛看了一下累積人數, 突然覺得還蠻自豪的, 寫了這麼多年, 終於升級成百萬部落客了, 這感覺挺妙的; 不知道這樣會不會有人想要來打點廣告之類的:D ( 有的話歡迎底下留言或私訊一下好了, 讓我也享受一下接接業配的感覺 ).
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string ""
.
Roman numerals are represented by seven different symbols: I
, V
, X
, L
, C
, D
and M
.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000
For example, 2
is written as II
in Roman numeral, just two one's added together. 12
is written as XII
, which is simply X + II
. The number 27
is written as XXVII
, which is XX + V + II
.
最近在研究Media foundation, 弄到自己整個快死快死, 不知道為啥每次在研究新東西的時候, 腦袋都會有那麼一陣子卡住, 所以就跑回去刷刷題, 讓自己的小腦動起來...., 等之後研究差不多, 我再來出幾篇有關於MF的文章吧.
FFmpeg 自從幾年前開始就不再提供編譯好的Lib & DLL, 導致現在現有的lib和dll都是別人用好的, 於是決定參考網路一些資料, 並且在自己電腦實測, 將編譯的技術分享給各位.
/**
*
* C++ 中的函數指針模板
*
* 所謂的函數指針模板就是指向函數模板的函數指針.
*
*[問題描述]
* 定義了一類函數模板, 而且這函數模板有共同的街口, 即一致的參數列表, 那麼如何定義一個函數指針,
* 使這個函數指針可以指向這一類中的所有函數模板呢?
*
* [一]
* 我們先了解一件事情, 在C++裡面, 函數模板僅僅是一個用來生成函數的代碼塊而已,
* 他本身並沒有實體, 有就是沒有與 "未被實例化的那些程式" 相對應的程式代碼塊,
* 所以也就無法對其取地址( 因為就不存在啊, 怎麼會有地址?),
* 所以只有在用具體類型代替模板參數, 對該模板進行實例化以後才能有函數實體.
*
* 而這些函數指針要指向函數的入口地址, 那麼既然函數模板沒有具體的內存地址, 那麼指向函數模板的函數指針如何得到地址呢?
* 所以所謂的 " 函數模板指針 " 這個定義是無法通過以下的方法實現的:
* templatevoid (*sample)(T& );
*
* [二]
* 所以就要用以下的方法來實現, 讓模板類與模板函數再一起
*/
#include
using namespace std;
class CA {
public :
/*
由於我們在寫這些工具類的方法, 通常我們都是用類的靜態成員函數,
靜態成員函數的訪問和調用, 是通過ClassType::StaticMemberFunction來實現
*/
//static int Sum(int a, int b);
int Sum(int a, int b)
{
return a + b;
}
};
class CB {
public:
//static float Sum(float a, float b);
float Sum(float a, float b)
{
return a + b;
}
};
template
class CC {
public:
// function pointer type template
/*
會使用到typedef 是因為要讓邊義氣明白pClassFunc是一個函數指針類型名(不是函數指針),
這個類型的函數指針可以指向一個函數,
被指向的這個函數必須滿足以下條件: 返回值為 ParaType,
參數列表為 (ParaType, ParaType), 而且是一個定義在ClassType類中的成員函數.
注意: 需要再作用域標示符號後面, 函數指針類型名之前, 一定要加上*(dereference),
表明要定義的是函數指針類型.
如果不加上這個操作符號, 那這邊就會變成對一個名叫pClassFunc的函數成員進行泛化了,
那麼typedef關鍵字的存在似乎就沒有意義了
*/
typedef ParaType(ClassType::*pClassFunc)(ParaType, ParaType);
// function pointer method
ParaType Result(ClassType* pClassType, pClassFunc fun, ParaType a, ParaType b) {
/*
使用這個函數指真實, 需要創建一個類的實例, 對於函數指針的fun所指向的成員函數, 需要由實例來完成調用.
*/
return (pClassType->*fun)(a, b);
}
};
void main()
{
CA ca;
CC cc;
int a = 3;
int b = 4;
printf("A+B : %d \n", cc.Result(&ca, &CA::Sum, a, b));
CB cb;
CCfcc;
float fa = 3.3f;
float fb = 4.6f;
printf("A+B : %f \n", fcc.Result(&cb, &CB::Sum, fa, fb));
}
RAII 是C++之父 Bjarne Stroustrup提出來的, 是一種關於物件導向的資源管理, 那為什麼要提出這個呢, 是因為C++這語言沒有資源回收機制, 就因為這樣, 所以我們在寫的時候, 會有機率產生Memory leak, 而RAII主要就是為了解決這個問題提出來的.