Size: a a a

2021 February 19

CK

Charlotte Karlos in supapro.cxx
Charlotte Karlos
Да, кстати, почему-то я не подумал о дефолте, благодарю :)
Хотя трабл это не исправляет
источник

CK

Charlotte Karlos in supapro.cxx
Charlotte Karlos
У меня есть метод backward, задача которого - смещение массива влево/назад. Он принимает один аргумент типа int в качестве смещения (на 1, 2, 3 или другое количество элементов). Так же, я добавил для него перегрузку, которая не принимает никаких параметров и просто делает backward(1), то есть просто для удобства. Но, когда я вызываю метод backward(), происходит нечто, что ломает работу программы. В то время, как вызов backward(1) не приносит никаких проблем. Почему? Ведь перегрузка не делает ничего, кроме как вызывает основной метод.

template <typename T>
void row<T>::backward(int iOffset)
{
 for (int i = 0; i < iOffset; ++i)
 {
   T temp = this -> arr[0];
   for (int j = 1; j < this -> iLen; ++j)
     this -> arr[j - 1] = this -> arr[j];
   this -> arr[this -> iLen - 1] = temp;
 }
}

template <typename T>
void row<T>::backward()
{
 this -> backward(1);
}
Конкретно происходит следующее (вывод массива в консоль):

0, 1, 2, 3, 4
1, 2, 3, 4, 0
2, 3, 4, 0, 1
324234, 4, 0, 1, 3
источник

CK

Charlotte Karlos in supapro.cxx
То есть теряется элемент в массиве, но, why?
источник

ip

illya palkin in supapro.cxx
Charlotte Karlos
Хотя трабл это не исправляет
Код ошибки и месседж кинь
источник

CK

Charlotte Karlos in supapro.cxx
illya palkin
Код ошибки и месседж кинь
Ошибки нету, лишь неверная работа
источник

ip

illya palkin in supapro.cxx
А
источник

CK

Charlotte Karlos in supapro.cxx
Charlotte Karlos
Конкретно происходит следующее (вывод массива в консоль):

0, 1, 2, 3, 4
1, 2, 3, 4, 0
2, 3, 4, 0, 1
324234, 4, 0, 1, 3
НО, когда я вызываю напрямую backward(1), как я уже говорил выше, всё работает как часики
источник

Q

Queen in supapro.cxx
Как смещается массив?
источник

IZ

Ilia Zviagin in supapro.cxx
Charlotte Karlos
У меня есть метод backward, задача которого - смещение массива влево/назад. Он принимает один аргумент типа int в качестве смещения (на 1, 2, 3 или другое количество элементов). Так же, я добавил для него перегрузку, которая не принимает никаких параметров и просто делает backward(1), то есть просто для удобства. Но, когда я вызываю метод backward(), происходит нечто, что ломает работу программы. В то время, как вызов backward(1) не приносит никаких проблем. Почему? Ведь перегрузка не делает ничего, кроме как вызывает основной метод.

template <typename T>
void row<T>::backward(int iOffset)
{
 for (int i = 0; i < iOffset; ++i)
 {
   T temp = this -> arr[0];
   for (int j = 1; j < this -> iLen; ++j)
     this -> arr[j - 1] = this -> arr[j];
   this -> arr[this -> iLen - 1] = temp;
 }
}

template <typename T>
void row<T>::backward()
{
 this -> backward(1);
}
Ну тут логика неверная
источник

Q

Queen in supapro.cxx
Так, это не важно даже вродь
источник

Q

Queen in supapro.cxx
Ilia Zviagin
Ну тут логика неверная
+++
источник

CK

Charlotte Karlos in supapro.cxx
Ilia Zviagin
Ну тут логика неверная
Так-так..
источник

ip

illya palkin in supapro.cxx
Charlotte Karlos
НО, когда я вызываю напрямую backward(1), как я уже говорил выше, всё работает как часики
std::rotate чем не угодил ?
источник

IZ

Ilia Zviagin in supapro.cxx
Charlotte Karlos
У меня есть метод backward, задача которого - смещение массива влево/назад. Он принимает один аргумент типа int в качестве смещения (на 1, 2, 3 или другое количество элементов). Так же, я добавил для него перегрузку, которая не принимает никаких параметров и просто делает backward(1), то есть просто для удобства. Но, когда я вызываю метод backward(), происходит нечто, что ломает работу программы. В то время, как вызов backward(1) не приносит никаких проблем. Почему? Ведь перегрузка не делает ничего, кроме как вызывает основной метод.

template <typename T>
void row<T>::backward(int iOffset)
{
 for (int i = 0; i < iOffset; ++i)
 {
   T temp = this -> arr[0];
   for (int j = 1; j < this -> iLen; ++j)
     this -> arr[j - 1] = this -> arr[j];
   this -> arr[this -> iLen - 1] = temp;
 }
}

template <typename T>
void row<T>::backward()
{
 this -> backward(1);
}
Да и постановка задачи странная.
ВЕСЬ МАССИВ сдвигается?
источник

CK

Charlotte Karlos in supapro.cxx
illya palkin
std::rotate чем не угодил ?
Просто реализую свой метод
источник

CK

Charlotte Karlos in supapro.cxx
Ilia Zviagin
Да и постановка задачи странная.
ВЕСЬ МАССИВ сдвигается?
Ну да, на один элемент влево
источник

Q

Queen in supapro.cxx
А а чём проблема сделать значение по умолчанию?
источник

IZ

Ilia Zviagin in supapro.cxx
Charlotte Karlos
Ну да, на один элемент влево
Начиная с чего?
источник

IZ

Ilia Zviagin in supapro.cxx
Charlotte Karlos
У меня есть метод backward, задача которого - смещение массива влево/назад. Он принимает один аргумент типа int в качестве смещения (на 1, 2, 3 или другое количество элементов). Так же, я добавил для него перегрузку, которая не принимает никаких параметров и просто делает backward(1), то есть просто для удобства. Но, когда я вызываю метод backward(), происходит нечто, что ломает работу программы. В то время, как вызов backward(1) не приносит никаких проблем. Почему? Ведь перегрузка не делает ничего, кроме как вызывает основной метод.

template <typename T>
void row<T>::backward(int iOffset)
{
 for (int i = 0; i < iOffset; ++i)
 {
   T temp = this -> arr[0];
   for (int j = 1; j < this -> iLen; ++j)
     this -> arr[j - 1] = this -> arr[j];
   this -> arr[this -> iLen - 1] = temp;
 }
}

template <typename T>
void row<T>::backward()
{
 this -> backward(1);
}
Ты просто ещё раз оцени постановку задачи и сравни с тем что ты написал
источник

IZ

Ilia Zviagin in supapro.cxx
Ilia Zviagin
Ты просто ещё раз оцени постановку задачи и сравни с тем что ты написал
Мне даже разбираться лень, но видно что не так все
источник