Помогите понять! Подозреваю что я удаляю неправильно..
Внимательней надо читать документацию.
int ArrayCopy( void& dst_array[], // куда копируем const void& src_array[], // откуда копируем int dst_start=0, // с какого индекса пишем в приемник int src_start=0, // с какого индекса копируем из источника int count=WHOLE_ARRAY // сколько элементов );
У вас получается что при копировании массива "сам в себя", писать надо во вторую строку, но читать с третьей. А её-то и нету.
И ещё очень важное замечание: При копировании многомерный массив переводится в одномерный. Поэтому надо копировать с индекса "индекс строки"*"размерность во втором измерении.
Получается что копировать надо в частном случае
ArrayCopy(array, array, 3, 6, 3);// Выделенное можно опустить.
Дай Бог не ошибся.
И в этом случае будет удалена строка с индексом 1 из массива, а не 2.
А что за цикл с внутренним циклом в конце кода? Какова его роль?
Внимательней надо читать документацию.
У вас получается что при копировании массива "сам в себя", писать надо во вторую строку, но читать с третьей. А её-то и нету.
И ещё очень важное замечание: При копировании многомерный массив переводится в одномерный. Поэтому надо копировать с индекса "индекс строки"*"размерность во втором измерении.
Получается что копировать надо в частном случае
Дай Бог не ошибся.
И в этом случае будет удалена строка с индексом 1 из массива, а не 2.
А что за цикл с внутренним циклом в конце кода? Какова его роль?
спасибо разобрался! кому интересно привожу исправления
//+------------------------------------------------------------------+ //| test.mq5 | //| Copyright 2018, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- int array[][3]; ArrayResize(array,3); // 0 - строка - 3 столбца array [0][0]=2; array [0][1]=8; array [0][2]=5; // 1 - строка - 3 столбца array [1][0]=7; array [1][1]=3; array [1][2]=9; // 2 - строка - 3 столбца - ХОЧУ ЕЕ УДАЛИТЬ! array [2][0]=4; array [2][1]=8; array [2][2]=6; ArrayDelete(array,2);//Удаляем последнюю строку массива Print("результат после удаления "); for(int i=0; i<2; i++) for(int j=0; j<3; j++) Print(array[i][j]); } //+------------------------------------------------------------------+ void ArrayDelete(int &array[][3],int i) { int j=i*3; ArrayCopy(array,array,j,j+3); ArrayResize(array,ArrayRange(array,0)-1); } //+------------------------------------------------------------------+
А что за цикл с внутренним циклом в конце кода? Какова его роль?
Вывод значений двухмерного массива.
Как по мне, так проще структуру использовать. И не изобретать велосипед.
struct SArray { int a[]; } array[]; void OnStart() { //--- if( ArrayResize(array,3) != 3 ) return; for(int i=0; i<ArraySize(array); i++) if( ArrayResize(array[i].a, 3) != 3 ) return; // 0 - строка - 3 столбца array[0].a[0]=2; array[0].a[1]=8; array[0].a[2]=5; // 1 - строка - 3 столбца array[1].a[0]=7; array[1].a[1]=3; array[1].a[2]=9; // 2 - строка - 3 столбца - ХОЧУ ЕЕ УДАЛИТЬ! array[2].a[0]=4; array[2].a[1]=8; array[2].a[2]=6; for(i=0; i<2; i++) for(int j=0; j<3; j++) Print(array[i].a[j]); }
И делайте с ней что хотите.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите понять! Подозреваю что я удаляю неправильно..