检查类型节点的数组是否已满.c ++

时间:2016-08-13 02:15:48

标签: c++ arrays hash

我正在练习只使用数组制作哈希表的问题。

我有function runGenerator(gen) { const it = gen(); let ret; (function iterate(val) { ret = it.next(val); if (!ret.done) { if (ret.value instanceof Object && "then" in ret.value) { ret.value .then(iterate) .catch((err) => { it.throw(err); }); } else { setTimeout(function() { iterate(ret.value); }, 0); } } })(); } function myPromise(){ //Do Async Operation return new Promise((res, rej) => { res('Result from Async Operation'); }) } runGenerator(function*(){ const myVal = yield myPromise(); //Generator waits until promise is resolved or rejected alert(myVal); });

即使类型为Hash_Entry myMap[128][128],我可以将所有值都发送到NULL或0吗?

如果我不能解决问题,那就是检查第二维数组是否已满。

我想过做

hash_entry

这是我很好的实施吗?

或者我想过第二个数组会增加每个存储桶的计数,然后测试该计数是否等于存储桶大小

1 个答案:

答案 0 :(得分:0)

这段代码肯定不是C ++。假设您在c ++中实际尝试实现的是什么,您可以编写一个简单的模板来检查std::array的成员是否等于成员提供的emptyValue

#include <array>
#include <iostream>
#include <algorithm>

template<typename T, size_t N, T emptyVal = NULL>
bool arrayIsFull(const std::array<T, N> &arr) {
    return !std::any_of(
        std::cbegin(arr),      // |   const iterators
        std::cend(arr),        // |__ c++11 and up
        [](const T &val) { return val == emptyVal; } // simple lambda to check if any member is equal to the expected empty value.
    );
};

检查它们是否全部是满的。

static std::array<std::array<int, 10>, 10> twoDimArr;

void checkIfAllFull(void) {
    bool allFull = std::all_of(
        std::cbegin(twoDimArr),
        std::cend(twoDimArr),
        [](const auto &oneDimArr) {return arrayIsFull(oneDimArr); }
    );

    std::cout << (allFull ? "Filled up!\n" : "There's still some room!\n");
}

int main(int argc, char **argv) {

    for (auto it = std::begin(twoDimArr); it != std::end(twoDimArr); ++it) {
        std::fill(std::begin(*it), std::end(*it), 1);
    }

    checkIfAllFull();
    twoDimArr.at(3).at(7) = 0;
    checkIfAllFull();

    std::cin.get();
}

我不确定Hash_Entry是什么,但您可以通过模板轻松提供自己的类型和空值。