簡體   English   中英

如何將數據復制到另一個向量?

[英]How vector copy data to another vector?

我想說:

const int MAX_BUFFER = 1024;
std::vector<double> AV(MAX_BUFFER);
std::vector<double> CV{ AV };

AV如何復制到CV

如果我使用double s數組(即double[] ),則需要更多(在MSVC和/Oi上使用分析器嘗試):

for (int sampleIndex = 0; sampleIndex < MAX_BUFFER; sampleIndex++) {
    C[sampleIndex] = A[sampleIndex];
}

它如何更快地復制? 我怎么能用C ++數組標准做同樣的事情?

這絕對肯定很難回答,因為它取決於你的工具鏈和你的優化水平以及(在某種程度上)命運。

我希望有一個強大的編譯器來優化你的循環到一個不需要計數器和單個值副本的memcpy 或許不是。 當然看起來你的不這樣做。

我肯定希望矢量副本能夠做到這一點(因為無論誰編寫了vector實現都很聰明並且會發現這個機會)。

最終你必須閱讀實現的源代碼才能確定。

如果要盡快復制double[]內容,請使用std::copy

應該執行該優化。 當然它不會比你的循環慢,而且可能更快。 如果由於某種原因它不是,你也可以嘗試直接memcpy (雖然這消除了類型安全😟)。


為什么memcpy更快?

只要他們事先知道這就是你想要做的事情,計算機就可以一步到位地搗毀字節塊。

事實上,這是編寫“說出你的意思”的代碼的一個很好的教訓,讓計算機決定如何去做,而不是拼出你認為任務需要的各個步驟,從而使計算機更難盡可能以最好的方式做你真正的意思。

在這種情況下,“計算機”是標准庫實現,編譯器和CPU的無定形伙伴關系。

使用標准算法,您可以使用數組實現類似的簡潔性和可讀性:

std::copy(A, A + MAX_BUFFER, B);

就速度而言,它取決於標准庫的實現方式,以及編譯器如何優化循環。

暫無
暫無

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

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