~(bitset[E] | bOrD)
всегда выдаст или -1 или -2. Вы потом это пропустите через or, получите опять же -1 или -2 и в конце преобразуете это в bool. И вот тут-то оно всегда и станет true.~x
используйте x^1
, или в самом конце возвращайте результат с &1
, чтобы значения остальных бит ни на что не влияли. std::function<bool(int, int)> comp = [](int left, int right)
{
return left < right;
};
Sort(vec, comp);
Sort<int>(vec, [](int left, int right)
{
return left < right;
});
typename U
, у которого вы продполагаете существует operator(int, int). Если туда передать не function и не лябмду, оно не скомпилится:template <typename T, typename U>
void Sort(std::vector<T>& vector, U comparison) {
// Используете comparison, как-будто это std::function:
if (comparison(1, 1)) return;
};
int main()
{
std::vector<int> vec = { 1, 2, 3, 4, 5, 7, 6, 9 ,8 };
Sort(vec, [](int left, int right) -> bool
{
return left < right;
});
return 0;
}
for (int i = 0; i < a.length(); ++i) {
for (int j = 0; j < b.length(); ++j) {
c[i+j] += a[i] * b[j];
}
}
i+
- это и есть сдвиг. a[i] - это цифра на которую приходится домножать. а b[j] - это собственно само сдвигаемое и прикладываемое число. bool smaller_than_max = false;
bool bigger_than_min = false;
for (int i = 0; i < n; ++i) {
int left = bigger_than_min ? '0' : minimum[i];
int right = smaller_than_max ? '9' : maximum[i];
answer[i] = left + rand() % (right - left + 1);
bigger_than_min |= answer[i] > minimum[i];
smaller_than_max |= answer[i] < maximum[i];
}
int **a;
// или vector<vector<int>> a;
a[10][7];
M*(sizeof(int*))+M*N*sizeof(int)
. Чуть сложнее для vector, но идея такая же.int a[10][3];
a[4][5];
N*M*sizeof(int)
.int[4][5]
к int**
. И такой массив при передаче в функцию надо передавать по типу int[][5]
(можно опустить количество строк. Ибо для адресации нужна лишь длина строк, но нестолбцов, но размер строки указать предется обязательно).arr[1][2] => *(*(arr + 1) + 2)
Это действительно работает, потому что arr имеет тип int[][3]
или int*[3]
. Коспилятор видя arr+1
, знает, что над сместится на 1 размер int[3]
. * разыменовывает это, но при этом указывает на то же место. И получает просто указатель на int начало строки. Фактически тут просто меняется тип указателя с int*[3] на int*. +2 сдвигается в строке на 2 размера int. int*
?int*
- это адрес в памяти. Число. Когда вы "перемещаете" img этого типа, вы перемещаете одно число. Из переменной img, в вектор.c_image
использует c_window
, который использует c_image
class c_image;
class c_window {
// ...
}
prog += 1/((double)i*(i+1));
, должно сработать.