Я пишу алгоритм сортировки radix, используя очереди, и я хотел бы, чтобы очередь STL выделяла пространство, прежде чем я начну добавлять вещи в очередь, чтобы я мог избежать постоянных операций динамического изменения размера.
Даже если этого не существует, я хочу что-то с эффектом...
queue<int> qs(N);
for(int i=0;i<N;++i)
qs.push(rand());
таким образом, что он не будет динамически выделять какую-либо память во время цикла.
Фактический код, о котором идет речь...
void radix_sort()
{
// Biggest number?
int max=-1;
for(int i=0;i<N;++i)
if(a[i]>max)
max = a[i];
// How many digits in it
int maxdigits=1;
while(max /= 10) maxdigits++;
// Create some buckets.
deque<int> b[10];
for(int i=0;i<10;++i)
b[i] = deque<int>(N);
int div=1;
// Radix Sort by digits
for(int d=1;d<=maxdigits;++d)
{
if(d>1)
div*=10;
// Queue
for(int i=0;i<N;++i)
b[ (a[i]/div) % 10 ].push_front(a[i]);
// Dequeue
int k=0;
for(int q=0;q<10;++q)
while(b[q].size() > 0)
{
a[k++] = b[q].back();
b[q].pop_back();
}
}
}