суббота, 6 января 2018 г.

Задание начального значения элементам массива

Очень часто при решении задач с массива требуется задать им начальное значение или обнулить. Самый простой способ использование цикла. Но есть и специальные функции, которые по указанному количеству байт задает им начальное значение.

В Паскале:

var A:array[1..100]of integer;
FillChar(A, 100*SizeOf(integer), 0);

Для строк:
Var S:string;
S:='';

или
Var S:string[100];
FillChar(S, SizeOf(S), ' ');

В С++:

int A[10]={0};
int B[10]={1};

Но для массива с переменной длиной не будет работать, надо так:

int n;
cin>>n;
fill(A, A+n, 0); 
Здесь A - хранит адрес начала массива, А+n - переносим указатель на n элементов, т.е. в конец массива, третий аргумент - чем заполнить массив, можно поставить 1.

fill(&A[0], &A[0]+n,0);
Здесь &A[0] - получаем адрес на начальный элемент массива с индексом 0.

Таким образом можно обнулять часть массива, например, начиная с середины:
fill(&A[n/2], &A[0]+n,0); 

Если это двумерный массив:
int n, m;
cin>>n>>m;
double A[n][m];
fill(&A[0][0], &A[0][0]+n*m, 0);

Если массив объявлен как vector:
vector <bool> A;
int n;
cin>>n;
A.resize(n,false);

или
fill(A.begin(), A.end(),true);



Комментариев нет:

Отправить комментарий