我已經實現了使用查找表的快速比較功能。由於該功能在項目中的多個類中使用,因此我需要確保在整個程序執行期間只有一個查找表副本。在C++中使用全局矢量
查找表是一個簡單的vector<int>
大小爲65536.我希望這個表在程序的開始時被初始化,而不是在第一次使用的時候初始化。如何處理這個問題?
以下代碼片段是我比較函數的當前版本。我相信通過使lookup_table
成爲一個靜態變量,問題將僅部分解決,因爲靜態變量的生命週期在程序流第一次遇到聲明時開始。
int fast_compare(const char* array1, const char* array2, int length)
{
static const vector<int> lookup_table = init_lookup_table();
// process the input arrays...
// ...
return lookup_table[...];
}
vector<int> init_lookup_table()
{
vector<int> lut(65536);
// ----------------------------
// initialize the look-up table
// ...
// ...
// end of initialization
// ----------------------------
return lut;
}
解釋的。如果你知道在編譯時的大小,您可以受益於使用'的std :: array',而不是'的std :: VECTOR'。 –
在'fast_compare'函數中聲明'lut'作爲'static'變量會使它更加線程安全。如果您需要可預測的運行時,則可以在啓動時通過調用函數來初始化變量。 –
我對thread-safty的評論僅適用於C++ 11,請參見第6.7.4節。 –