2012-06-02 30 views
1

的陣列最有效的方法我有一個像結構:返回struct成員

struct ohlc{ 
    double open,high,low,close; 
}; 

部分我的應用程序利用這些收集的。有時候打上時間戳。我的應用程序的另一部分使用第三方(封閉)庫,它需要雙倍數組,例如關閉[]或打開[]等。

什麼是最適合的容器和方法來返回一個雙數組的開放[],關閉[]等。目前,我使用矢量和迭代整個集合創建陣列。有沒有更有效的方法。

我可能會完全錯誤,我目前使用的結構?我擁有的是價格/價格的價格。我嘗試保留M1,M5,M15和H1蠟燭棒的集合,即OHLC數據。通常我只需要100小時的數據。隨着價格出現新的一分鐘,我可以隨時刪除最長的分鐘,從而保持100小時的數據。由於H1,M15,M5,M1都可以根據時間戳詢價價格的基礎數據創建,出於性能原因,是否還需要持有獨立的H1,M15等。我問這是因爲它是重複的數據?

編輯:我目前的方法對我的通常目的很好,但現在我是'回測試',我在我的代碼中投擲了數百萬個出價/要價,並且需要儘可能高效。後面的測試目前還需要幾個小時才能完成

我從我的收藏結構的回報如下:

std::vector<double> Series::EODSeries::open(const_iterator iter, unsigned long num) const 
{ 
    vector<double> v; 

    if(iter == end()) 
    return v; 

    // reverse iterator init skips the first element in collection. We must manually insert the current element. 
    v.insert(v.begin(), iter->second.open); 
    unsigned i = 1; 
    for(const_reverse_iterator rev_iter(iter); i < num && rev_iter != rend(); ++rev_iter, ++i) 
    v.insert(v.begin(), rev_iter->second.open); 

    return v; 
} 
+0

你是如何返回vector的,並且調用者是否需要擁有它的副本?他們需要能夠寫信給它嗎?也許一個代碼片段顯示瞭如何從矢量中獲取數組並將其傳遞給第三方API將會有所幫助。 – juanchopanza

+0

會將示例添加到我的原始 – stratman

回答

3

你說的第三方應用程序需要雙打的陣列但這是有些誤導,因爲數組無法論證在C++中 - 它們總是衰減爲指針。

所以你可以做的只是傳遞一個指向你的向量的第一個參數的指針。這是保證工作。

// Assuming the following signature: 
void the_method(double arg[]); 
// is actually the same as: 
// void the_method(double* arg); 

std::vector<double> open; // your vector 
the_method(&open[0]); 

不過,如果我誤解你,你實際上有一個std::vector<ohlc>,那麼你基本上是出於運氣 - 你確實需要的openclose會員出這個向量的元素複製到其自己的容器。但即使在這裏,我建議你在代碼中使用vector,而不是C數組。

+0

關於向量vs c數組的好處。我應該記住,我可以使用這種方式。我會嘗試傳遞載體。 – stratman