Sam Bown Ответов: 1

Какова роль функции замены в массиве


#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int data[]={10,20,30,40,50};
    int i;
    for(i=0; i<2; i++)
    {
        int j=data[i];
        replace(data,data+5,j,data[4-j]);
        replace(&data[0],&data[5],data[4-j],j);
    }

    for(i=0; i<5; i++)
    {
        cout<<data[i]<<" ";
    }
}


Что я уже пробовал:

Я ожидал, что выход будет 50,40,30,20,10, но фактический выход-10,20,30,40,50

Richard MacCutchan

Согласно документации, замена работает на итераторах, а не на указателях. Это может быть проблемой.

Sam Bown

но когда вы его компилируете,
Это не дает ошибки

Richard MacCutchan

Смотреть ниже.

1 Ответов

Рейтинг:
12

Richard MacCutchan

        replace(data,data+5,j,data[4-j]);  // ***** data[4-j] you are using j as the offset
        replace(&data[0],&data[5],data[4-j],j);  // but it should be i thus:

// corrected:

        replace(data, data+5, j, data[4 - i]);   // and added spacing for readability
        replace(&data[0], &data[5], data[4 - i], j);


Sam Bown

Вы только что решили полный вопрос.....но можете ли вы объяснить мне замену более подробно

Richard MacCutchan

Смотрите документацию по адресу: <алгоритм> функции | Microsoft Docs[^].

В основном это позволяет заменить все элементы в массиве (или его части), которые имеют определенное значение. Это особенно полезно с таким массивом, как:
int vatRate[] = { 0, 120, 175, 175, 120, 0, 200, 120 };
где вам нужно изменить все записи, содержащие, например, 120 на 150. В большом массиве это экономит довольно много работы. (Я узнал об этом только сегодня).