在C++ 11中,2D矢量在時間上如何對抗1D矢量?
在給出的2D矢量中,所有內部矢量的大小相同。2D矢量vs 1D矢量
例:
std::vector<std::vector<int>> X{10, std::vector<int>(4)};
VS
std::vector<int> Y(40);
哪個頭像載體將有更好的表現,當元素是隨機訪問?
在C++ 11中,2D矢量在時間上如何對抗1D矢量?
在給出的2D矢量中,所有內部矢量的大小相同。2D矢量vs 1D矢量
例:
std::vector<std::vector<int>> X{10, std::vector<int>(4)};
VS
std::vector<int> Y(40);
哪個頭像載體將有更好的表現,當元素是隨機訪問?
一個單一的std::vector
本質上更簡單,它只是一個連續的內存塊存儲在某個地方。
A std::vector
of std::vector
有更多的開銷,但它也更強大(因爲每個內部向量可以是不同的大小,例如)。
隨機訪問性能應徹底基準爲使用您的具體模式,但主要區別在於:
size_t index = x + y*WIDTH
和訪問元素是的,額外的間接訪問級別會導致額外的內存訪問,這會減慢速度,有時候會影響現代系統中的大型因素。在現在的古老CPU上,額外的間接尋址有時可能會更快,因爲相對於存儲器訪問,乘法可能相當耗時。人們有時看到20年前寫的代碼就是這樣做的。除非需要可變的行大小,否則這些日子通常是不好的做法 – doug
如果您在編譯時知道任何內部或外部大小,請使用'std :: array
與任何時間測量一樣,您必須在您關心的系統上進行測量。 – merlin2011
@ merlin2011我想知道,與1D相比,C++優化2D矢量有什麼不同。我很擔心,因爲我的少數人運行,而不是C++ 11的專業知識可能最終導致我錯誤地採取了一些措施。 – letsBeePolite
任何性能測量的第一條規則是第一次測量總是錯誤的。但這就是爲什麼我們繼續測量,直到我們有理由有信心。 :P – merlin2011