Как перебирать по x и y (без изменения его в вектор) в следующем определении.Iterating Over Массивы неизвестного размера в функции-члене
class MinimumSquareEasy
{
public:
long minArea(int[] x, int[] y)
{
//ITERATION
}
};
Как перебирать по x и y (без изменения его в вектор) в следующем определении.Iterating Over Массивы неизвестного размера в функции-члене
class MinimumSquareEasy
{
public:
long minArea(int[] x, int[] y)
{
//ITERATION
}
};
int x[]
в качестве аргумента то же самое, как int * x
- у вас есть указатель, который не передает никакой информации о длине массива вы могли бы пройти в Таким образом, вы не можете перебирать его как. массив, потому что у вас нет информации, чтобы решить, когда прекратить итерацию.
Вам понадобится добавить дополнительный аргумент для каждого массива, который задает длину массива, или использовать стандартный контейнер, который передает длину самостоятельно.
В качестве альтернативы вы можете потребовать, чтобы входные массивы были завершены с некоторым количеством дозорных значений. Например, если это значение-опознавание равно -1, вы можете сразу перебрать оба массива с помощью этой конструкции, которая остановит итерацию, когда она достигнет значения часового в либо массива, что означает, что вы будете перебирать количество элементов в наименьшее из двух массивов:
for (; *x != -1 && *y != -1; ++x, ++y) {
// Use *x and *y
}
Однако этот подход очень в стиле C, а не C++. Его использование в новом коде должно быть очень обескураженным.
Я не могу принять никаких дополнительных аргументов. Я ограничен этим определением. – shubhamr
@shubhamr Если вы не можете изменить подпись метода, ваша задача невозможна. – cdhowie
Многие вопросы о topcoder просят нас использовать эти типы определений. Это должно быть каким-то образом. – shubhamr
В НЕКОТОРЫХ реализации распределителя МОЖЕТ добавить размер выделенного буфера непосредственно перед фактическим буфером.
Это иногда используется для оператора delete [], чтобы узнать, сколько байтов освободится.
НЕКОТОРЫЕ компиляторы добавляют переменную sizeof(int)
с размером.
BUT Это всего лишь функция реализации, и не гарантируется существование.
Можно перегрузить новые [] и удалить [] операторы.
Или компилятор может реализовать новые [] и удалить [] с внутренней картой, которая использует адрес с ключом, поэтому у вас не будет никакой информации о размере, просто глядя на буфер.
Это опасно и, конечно же, не что-то определенное в стандарте.
И выделенный стеком массив не будет выделен с помощью 'new []', поэтому, если кто-то пройдет один, вы будете ввернуты. – cdhowie
'minArea' даже не имеет действительной декларации. Квадратные скобки должны появиться после имени переменной. –