std::vector<bool>
грязно в лучшем случае и мерзость в худшем. Его operator[]
не возвращает bool&
, а скорее прокси-объект ( см. Здесь ). Этот прокси не имеет перегрузок для всех возможных побитовых операций, поэтому вы должны использовать ifs, его operator=(bool)
или его flip()
.
РЕДАКТИРОВАТЬ: я просто прочитал ваш код, а не ваше описание, что вы хотите делать. Установка xor для двух битов вообще не проблема:
out[i] = in[j] ^ in[k]; // Whatever the right indices are.
Я думаю, что вы на самом деле хотите сделать следующее:
bool tmp = false;
if(foo(i)>0 && foo(i)<in.size())
tmp^=in[foo(i)];
if(bar(i)>0 && bar(i)<in.size())
out[i]=tmp^in[bar(i)];
То есть, если вы хотите чтобы вернуть in[bar(i)]^in[foo(i)]
, если оба проходят проверку границ, вернуть in[j]
, если только один (здесь обозначается j
) прошел проверку границ и false
, если ни один из них не прошел его.