나는 C++ vector에 대해 질문이있다. 내가 입력 1000000벡터 (INT)에와 push_back을 테스트하고 만
4 밀리 초캐시를 사용하여 벡터를 빠르게 만들거나 무엇을 할 수 있습니까?
vector <int> Test;
auto start_t = chrono::high_resolution_clock::now();
for (int i = 0; i < 1000000; i++) Test.push_back(i);
cout << chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - start_t).count() << " milliseconds\n" << endl;
하지만 난 내 자신의 배열 엔진을 만든 경우에도이 작업을 수행하는 데 약 3 분 걸렸다 년대에 끝났다 이 크기 (할당 * 2) (각 할당 시간마다) 할당 할당을 설정합니다. 각 할당 시간에 대해
template <typename T>
class Array {
private:
T * storage_;
int alloc_ = 0;
int count_ = 0;
int all_ = 0;
public:
Array() = default;
~Array() { delete[] storage_; }
void Set(const T & __t) {
if(count_ + 1 >= alloc_) {
T * temp = new T[count_ * 2 + 4];
if(count_ > 0) for (int i = 0; i < count_; i++) temp[i] = storage_[i];
delete[] storage_;
storage_ = temp;
all_++;
}
storage_[count_++] = __t;
}
int all() { return all_; }
int count() { return count_; }
};
... 얼마나 가능한가이 속도? 캐시입니까? 왜냐하면 나는 그것을 C++ 최적화로 믿지 않기 때문에 최적화 과정에서 어떤 일이 일어 났는가? 이렇게 빨리 벡터를 만들 수는 없다 ... 나는 completly 캐시이거나 1000000 번을 다시 찾아서 1000000 크기를 할당하는 것을 감지한다. 시작과 진행 과정에서 ... 사실입니까 아니면 다른 것입니까?
또는 무엇을 말하고 싶습니다 – StoryTeller
[std :: vector :: reserve] (http://en.cppreference.com/w/cpp/container/vector/reserve)를 사용하는 것이 좋습니다. C++ [containers] 문서 (http://en.cppreference.com/w/cpp/container). BTW, 몇몇 C++ 표준 라이브러리는 무료 소프트웨어 ([GCC] (http://gcc.gnu.org/)와 같은 C++ 컴파일러에 포함되어 있습니다 ...)로 구현 및 소스 코드를 연구 할 수 있습니다. –
'__t'는 UB.͏͏͏͏͏͏ – Bathsheba