首页 > 解决方案 > 如何使用向量组合桶

问题描述

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

这是我现在的方法。

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;

arrManyBuckets类中的私有方法。

该程序应该采用n一定数量的桶并将它们组合到列表数组中。

标签: c++

解决方案


bucket[i]应该是bucket[j]and 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];
    }
  }
}

推荐阅读