我正在使用队列编写基数排序算法,我想在开始向队列添加内容之前让STL队列分配空间,这样我就可以避免持续的动态调整大小操作.
即使这不存在,我想要的东西具有...的效果
queue<int> qs(N);
for(int i=0;i<N;++i)
qs.push(rand());
Run Code Online (Sandbox Code Playgroud)
以这种方式,它不会在循环期间动态分配任何内存.
有问题的实际代码......
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(); …Run Code Online (Sandbox Code Playgroud)