我的問題是,即使使用operator []來獲取我的向量內容,矢量是 始終調用size函數(根據我的分析工具和時間測量)。因此,由於我的C++應用程序對時間非常關鍵(小於0.1ms),所以我認爲我最好將它轉換爲一個數組,但目前爲止我無法弄清楚。 實際向量看起來像:從vector <pair <double *,pair <double *,int * >>到數組的C++轉換
std::vector<std::pair<double*,std::pair<double*,int*>>>
我的問題是,即使使用operator []來獲取我的向量內容,矢量是 始終調用size函數(根據我的分析工具和時間測量)。因此,由於我的C++應用程序對時間非常關鍵(小於0.1ms),所以我認爲我最好將它轉換爲一個數組,但目前爲止我無法弄清楚。 實際向量看起來像:從vector <pair <double *,pair <double *,int * >>到數組的C++轉換
std::vector<std::pair<double*,std::pair<double*,int*>>>
可以將其轉換爲一個指針到一個這樣的數組的第一個元素:
pair<double *, pair<double *, int *> > *ar = &v[0];
使用v.data()
代替&v[0]
在C++ 11。
無關地,我有點懷疑size()
函數佔用了可測量的時間量。它通常是一個內聯函數,它返回一個字段或返回兩個指針字段的差異。
我並沒有使用C++ 11,因爲我的僱主要求現在使用visual studio 2005 –
由於問題標記爲'visual-C++',因此我將假定正在使用該編譯器。
C++標準庫的Microsoft實現包含各種檢查,以檢測產生未定義行爲併產生運行時錯誤的情況。這些檢查默認啓用(即使對於發佈版本也是如此),但您可以通過將_SECURE_SCL
定義爲0
來禁用它們。有關更多信息,請參見here (MSDN)和here。
它更好,但vector :: size會被調用得太多。我其實已經考慮了Size值 –
請張貼一些支持代碼以便清楚瞭解情況。 –
你確定你在使用發佈版本嗎? (調試版本可能檢查邊界,版本不應該)。你正在使用哪種STL實現? – Philipp
我知道這是因爲Debug版本,但我必須使用它。 –