我需要每次插入一個向量的末尾,2個元素。哪個函數更快push_back,插入C++
我想知道做vector.insert(iter_first,iter_second)比做vector.push_back(first)還是vector.push_back(second)更快?
也許另一種選擇是創建一個結構是這樣的:
struct T{int a; int b;};
T t;
t.a = first;
t.b = second;
X.push_back(t);
我需要每次插入一個向量的末尾,2個元素。哪個函數更快push_back,插入C++
我想知道做vector.insert(iter_first,iter_second)比做vector.push_back(first)還是vector.push_back(second)更快?
也許另一種選擇是創建一個結構是這樣的:
struct T{int a; int b;};
T t;
t.a = first;
t.b = second;
X.push_back(t);
如果兩個元素有邏輯關係,那麼你可以使用一個結構或類。如果它們不相關,那麼出於性能原因肯定不會將它們分組。
這種過早優化的氣味。相反,編寫最清晰的代碼以便讓編譯器爲您生成代碼。這就是它的目的。考慮到易於閱讀的代碼易於維護,易於維護的代碼易於重構,並且由於誤解而不太可能產生微妙的性能缺陷。
在矢量的末尾插入將比插入矢量的中間或開始處快得多。
這隻會事情,當你有一個大矢量,和/或你的對象的拷貝構造函數難以置信痛苦。
雖然在你的情況下,差異是微不足道的,一般來說C++語言標準指定了複雜性信息,所以你不需要問 - 你可以查看它。 vector::push_back
has amortized constant time complexity和vector::insert
is either proportional to the sum of the number of elements inserted and the number of elements moved, or the product of the two, depending on how you call it。
實事求是地講,push_back
會調用insert
,因此調用 push_back
兩次結束調用insert
兩次。然而,在實踐中,如果代碼已經優化, ,如果它產生了 差異,我會感到驚訝。做什麼是合理的,如果你有 性能問題,以後再優化。
什麼都不會影響你。繼續。 –
你不應該根據一些人說可能會稍微快一點來構建你的數據。使用有意義的東西。如果這兩個值在邏輯上屬於一個整體,那麼無論有任何潛在的性能影響,它都可能成爲一個結構。 – delnan
簡介並參閱! –