Rozważ poniższy kod.Czy wektor jest znany z rezerwowania jako pierwszy przy inicjalizacji przez parę iteratorów?
struct MyData{
MyData(const BYTE* pData, size_t uSize)
: bucket_(pData, pData + uSize)
{}
std::vector<BYTE> bucket_;
};
mój bucket_
zrobić reserve
pierwszy podczas inicjalizacji z parą iteratorów? Coś jak vec.reserve(std::distance(begIter, endIter))
.
A może po prostu wykonujesz poważnie: push_back
lub back_inserter_iterator::operator=
?
Jeśli nie, być może trzeba zainicjować go za pomocą uSize
z 0, a następnie wykonaj memcpy_s
w bloku konstruktora.
Należy zatem wykonać 2 przejścia, jeśli są do przodu lub w dwóch kierunkach (jeden dla odległości, drugi dla przydzielenia). W niektórych przypadkach narożnych (gdzie iteracja jest znacznie wolniejsza niż kopiowanie wynikowych danych), ręczne wstawianie pojedynczego elementu może być szybsze. – Yakk
@Yakk: Prawdopodobnie; wszystkie standardowe algorytmy biblioteczne będą prawdopodobnie implementowane przy założeniu, że iteracja jest względnie tania, tak więc rozwijanie własnej alternatywy może być szybsze, jeśli nie jest to prawdą. – Hurkyl