如何使用矢量组合存储桶

How to combine buckets using vectors

本文关键字:存储 组合 何使用      更新时间:2023-10-16

我正在为学校做一个项目,我在组合存储桶时遇到了麻烦。

这是我现在的方法。

void combineBuckets() {
  for (unsigned int i = 0; i < numBuckets; ++i) {
    auto bucket = globalBuckets->getBucket(i);
    for (unsigned int j = 0; j < globalBuckets->getNumItemsInABucket(i); ++j) {
      list[j] = bucket[i];
    }
  }
}

globalBuckets 是我正在使用的类的全局对象。 getBucket()返回存储桶 getNumBuckets() 返回该存储桶中的项目数。

我遇到的主要问题是内部循环。说明说:

  • 循环浏览存储桶数量
  • 将单个存储桶从globalBuckets中取出
  • 将该单个存储桶中的所有项目复制到列表数组中。

这些是变量:

unique_ptr<unsigned long[]> list;
unique_ptr<ManyBuckets> globalBuckets;
vector< vector<unsigned long> > arr;

arr 是 A ManyBuckets 类中的私有方法。

该程序应该获取n数量的存储桶并将它们组合到列表数组中。

bucket[i]应该是bucket[j]的,list假设它指向一个足够大的数组来容纳所有存储桶,应该使用每次插入都会递增的索引。因此,请将其更改为:

void combineBuckets() {
  int idx = 0;
  for (unsigned int i = 0; i < numBuckets; ++i) {
    auto bucket = globalBuckets->getBucket(i);
    for (unsigned int j = 0; j < globalBuckets->getNumItemsInABucket(i); ++j) {
      list[idx++] = bucket[j];
    }
  }
}