我正在练习只使用数组制作哈希表的问题。
我有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
这是我很好的实施吗?
或者我想过第二个数组会增加每个存储桶的计数,然后测试该计数是否等于存储桶大小
答案 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是什么,但您可以通过模板轻松提供自己的类型和空值。