ブール値のベクトルがストレージを 1 ビットに凝縮するという事実を利用しようとしています。次のレシピは、int 配列に繰り返しが含まれているかどうかを判断するための良い方法です (それとも、私の考え全体に本質的な欠陥があるのでしょうか?)。私のコンパイラである XCode がなぜこれを好まないのかわかりません
INT_MAX - INT_MIN + 1
次のコードの行。式を long にキャストしようとしましたが、同じ警告が表示されました。どんな助けでも大歓迎です!
bool contains_repeats_3(const std::vector<int>& V) {
std::vector<bool> bv (INT_MAX - INT_MIN + 1, 0); // <------ That's the problem line
for (std::vector<int>::const_iterator it = V.begin() ; it != V.end(); ++it) {
if (bv[*it - INT_MIN] == 1) {
return true;
} else {
bv[*it - INT_MIN] == 1;
}
}
return false;
}