首页 > 解决方案 > C++ 迭代大小为 N 的子向量

问题描述

我有一个可以是任意大小的输入向量。我想要的是把这个向量分成每个大小为 64 的向量并做一些事情。输入向量的大小不一定是 64 的倍数。

所以假设我有一个大小为 200 的向量,那么我应该将它分成 3 个大小为 64 的向量和 1 个大小为 8 的向量。

到目前为止,我想到的是以下内容:

vector<double> inputVector;
vector<vector<double>> resultVector;

UInt16 length = inputVector.size();
int div = (length % 64) == 0 ? length / 64 : (length / 64) + 1;

for (int i = 0, j = 0; i < div; i++) {
    vector<double> current
    for (int k = 0; k < 64; k++) {
        current.push_back(inputVector[j]);
       if (j++ >= length) break;
    }
    resultVector.push_back(current);
    if (j >= length) break;
}

我相信会有更好的方法,但我找不到任何例子

标签: c++stdvector

解决方案


您可以使用迭代器来创建子向量:

vector<double> inputVector;
vector<vector<double>> resultVector;

for (auto it = inputVector.cbegin(), e = inputVector.cend(); it != inputVector.cend(); it = e) {
    e = it + std::min<std::size_t>(inputVector.cend() - it, 64);
    resultVector.emplace_back(it, e);
}

推荐阅读