我試圖加快矢量::的push_back時容量不能被預測超速向量的push_back
當儲備可用的push_back在容器的端部將新的元素,然後結束標記被移動的載體。在使用所有保留後,push_back可能會觸發重新分配,這是一個緩慢的過程。
爲了加快速度,預留幾個即將到來的push_back重新生成,沒有重新分配時,爲空。你認爲這個代碼如何幫助實現這個目標?
#ifndef __VECTOR_HPP
#define __VECTOR_HPP
#include <exception>
#include "Concept.hpp" //Concept::RESA constant
#include <vector>
template <typename T>
class Vector : public std::vector<T> {
public :
void push_back (T t) {
if (std::vector<T>::size() == std::vector<T>::capacity()) {
std::vector<T>::reserve ((size_t) Concept::RESA);
}
std::vector<T>::push_back (t);
}
};
#endif
測試程序:
#include "Vector.hpp"
int main (int argc, char* argv []) {
{
std::vector<size_t> v0;
clock_t t (clock());
size_t duration (0);
for (size_t i (0); i != 10000000; i++) {
v0.push_back (i);
}
duration = (size_t) (clock() -t);
std::cout << "duration old push_back == " << duration << " ticks" << std::endl;
}
{
size_t duration (0);
Vector<size_t> v1;
clock_t t (clock());
for (size_t i (0); i != 10000000; i++) {
v1.push_back (i);
}
duration = (size_t) (clock() -t );
std::cout << "duration new push_back == " << duration << " ticks" << std::endl;
}
}
結果:
一個概念:: RESA == 8192,並應用建議,這裏有一個聯想ThinkCentre icore5結果(Linux的Debian的, g ++):
持續時間old push_back == 105317 ticks
duration new push_back == 87156 ticks
你究竟想用這段代碼實現什麼功能? – iehrlich
什麼是問題陳述? –
正如標題中所解釋的那樣:在使用全部保留後,超速push_back到一個向量 –