簡體   English   中英

並行附加時使用向量列表與向量向量的性能含義

[英]Performance implications of using a list of vectors versus a vector of vectors when appending in parallel

看來,在一般情況下,載體要優於列表,例如參見這里 ,追加簡單類型時。

如果我想要什么,以填補簡單類型的矩陣? 每個向量都是一列,因此我將遍歷外部向量,並向每個向量重復添加1個項目。

別外載體后者矢量總是要被移動時,先前向量增加他們的預留空間? 如在一個連續的空間整體的數據? 還是這些向量都只是持有指向其各個存儲區域的指針,這樣即使各個向量增大,外部向量的存儲大小仍保持不變?

從評論中可以看出,似乎很高興可以使用向量的向量。

對於中小型應用,很少擔心矢量的效率。

在某些情況下,您可能會擔心,但這種情況很少見。

class CData {};  // define this
typedef std::vector<CData> Column;
typedef std::vector<Column> Table;

Table tab;

要添加新行,您將在每個列上追加一個項目。 在最壞的情況下,您可能會導致每列的重新分配。 如果 CData非常復雜並且列當前包含大量CData單元(至少要說成千上萬),那可能是個問題。

同樣,如果添加一個新列並強制重新分配Table向量,則對於非常大的數據集,可能必須再次復制每列,這可能會有點慢。

但是請注意,一個新式的編譯器可能能夠move這些列從舊表move到新表(而不是copycopy ),從而使其快速地完成。

就像@kkuryllo在評論中說的那樣,通常無需擔心。

努力使您的代碼盡可能干凈,簡單和正確。 僅當分析揭示性能問題時,才需要擔心速度優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM