Масівы C ++


Масіў - гэта сукупнасць падобных аб'ектаў

Мы можам мець масіў цэлых лікаў, сімвалаў, радкоў, любыя вызначаныя карыстальнікам тыпы і г. д. Паколькі ў масіве можа быць любы тып калекцый (цэлыя лікі, сімвалы, радкі і г.д.), таму агульным спосабам масіў можна назваць калекцыя падобных прадметаў.

Масівы маюць фіксаваны памер

Пасля аб'яўлення масіва мы не можам змяніць памер масіва. Гэта азначае, што мы не можам паменшыць памер і павялічыць памер масіва.

Элементы масіва будуць вылучацца побач у памяці

Калі мы ствараем масіў, кожны элемент масіва будзе размяшчацца ў сумежных месцах памяці.

Непасрэднае размяшчэнне памяці азначае, што адразу пасля першага элемента масіва другі элемент будзе прысутнічаць у памяці. І адразу пасля другога элемента будзе прысутнічаць трэці элемент і г.д.

Усе элементы будуць размешчаны ў месцах памяці спіной да спіны.

Першы элемент масіва будзе мець самы нізкі адрас, а апошні элемент будзе мець самы высокі адрас.

Элементы масіва атрымліваюць доступ праз індэкс

Элементы масіва атрымліваюць доступ праз індэкс. Першы элемент будзе мець індэкс 0, другі элемент будзе мець індэкс 1, трэці будзе мець індэкс 2 і гэтак далей. Апошні элемент будзе мець індэкс (n-1), дзе n - колькасць элементаў у масіве.

  • Ці з'яўляецца масіў калекцыяй падобных аб'ектаў?
  • Ці масівы фіксаваны ў памеры?
  • Ці будуць элементы масіва вылучацца сумесна ў памяці?
  • Ці даступныя элементы масіва індэксам?

Калі вы скажаце "ДА" на ўсе вышэйпералічаныя пытанні, то вызначэнне масіва будзе

Масіў - гэта фіксаваная калекцыя падобных аб'ектаў, якія захоўваюцца сумесна, да якіх ажыццяўляецца доступ з дапамогай індэкса

Дэкларацыя масіва

Абвяшчэнне масіваў выкарыстоўвае наступны сінтаксіс:

elements_type name_of_array [ number_of elements]

Вось некалькі прыкладаў дэкларацыі масіва:
//declare an array of 100 elements of the type int
int myIntArray[100];
//declare an array of 5 elements of the type double
double myDoubleArray[5];

Пры аб'яўленні масіва выдзяленне памяці адбываецца ў памяці стэка. Макет памяці для масіва сумежны. Ідэнтыфікатар масіва (яго «імя») - гэта пачатковы адрас масіва ў памяці. Размяшчэнне памяці масіва double myDoubleArray [5] можна прадэманстраваць на наступным малюнку

Кожная "вочка" масіва мае памер double. Вы павінны памятаць, што нумарацыя масіва пачынаецца з 0 і заканчваецца колькасцю элементаў - 1.
Каб выкарыстоўваць аб'яўлены масіў, вам трэба яго ініцыялізаваць.

Ініцыялізацыя масіва

Ёсць некалькі спосабаў ініцыялізацыі масіва:

    1. Выкарыстоўваючы адну заяву з квадратнымі дужкамі:

int anotherIntArray[3] = { 1, 2, 5, 7 };
    1. Калі вы ініцыялізуеце масіў такім чынам, вы зможаце апусціць памер масіва ў дэкларацыі:

int anotherIntArray[] = { 1, 2, 5, 7 };

Памер масіва будзе ўсталёўвацца аўтаматычна ў залежнасці ад колькасці элементаў. Гэты масіў будзе мець памер 4.

Доступ да элементаў масіва

Доступ да элементаў масіва непасрэдна. Гэта можна зрабіць, выкарыстоўваючы індэксы масіва для доступу да элементаў.

Калі вам трэба працаваць з масівам, вам трэба атрымаць доступ да элементаў масіва. Гэта можна зрабіць, выкарыстоўваючы індэкс элемента ў дужках з імем масіва. Індэкс - гэта пазіцыя элемента ў масіве. Іншымі словамі, індэкс - гэта зрушэнне элемента адносна пачатку масіва. Нумарацыя элементаў у масіве пачынаецца з 0, таму першы элемент масіва мае індэкс 0. Вось прыклад размяшчэння памяці і індэксы масіва з 5 элементаў тыпу double:

Вось прыклад доступу да элементаў масіва ў цыкле:

//display all values of an array in a loop
for (int i = 0; i < 4; ++i)
cout << "Element with index " << i <<" is "<< anotherIntArray[i] << endl;

Гэты цыкл атрымлівае доступ да элемента з выкарыстаннем індэкса i. Зірніце на выхад:

Элемент з індэксам 0 роўны 1
Элемент з індэксам 1 роўны 2
Элемент з індэксам 2 роўны 5
Элемент з індэксам 3 роўны 7

Нельга выкарыстоўваць адмоўны лік для індэкса. Акрамя таго, нельга выкарыстоўваць індэкс, які перавышае памер масіва - 1. Калі вы паспрабуеце зрабіць гэта, вы атрымаеце доступ да часткі памяці, якая знаходзіцца побач з вашым масівам. Гэта можа прывесці да абсалютна фатальных вынікаў для вашай праграмы.

Перадача масіва функцыі

Вы можаце перадаць свой масіў функцыі. Каб перадаць масіў функцыі, вам проста трэба дадаць яго ў спіс параметраў. Гэта просты прыклад функцыі, якая прымае ў якасці аргумента масіў:

void passArray(int arr[], int size)
{
	for(int i = 0; i != size; ++i)
		cout << "Array[" << i << "] = " << arr[i] << endl;
}

Каб выклікаць гэтую функцыю з параметрамі, проста перадайце масіў як просты параметр:
passArray(anotherIntArray, 4);

Вярнуць масіў з функцыі

Існуе магчымасць вярнуць масіў з функцыі. Але гэта робіцца з выкарыстаннем паказальнікаў і абмяркоўваецца ў Вярнуць паказальнік на масіў з функцыі.

Шматмерны масіў

C ++ дазваляе ствараць шматмерны масіў. Шматмерны масіў - гэта масіў з элементамі, якія таксама з'яўляюцца масівамі. Простым прыкладам шматмернага масіва з'яўляецца двухмерны масіў, які ўяўляе сабой матрыцу. У гэтым элеменце масіва размешчаны 2 мерны масіў. Вы павінны выкарыстоўваць наступны сінтаксіс для аб'яўлення шматмернага масіва:

elements_type name_of_array [ number_of elements1] [ number_of elements2]… 
[ number_of elementsN]

Гэта аб'ява N-мернага масіва. У асноўным вы будзеце выкарыстоўваць у сваіх праграмах 2-х ці 3-х мерныя масівы.

2D-масівы

2D-масівы ўяўляюць матрыцу. Для любога элемента ў масіве першы індэкс у квадратных дужках - гэта колькасць радкоў, а другі - колькасць слупкоў гэтага элемента. Вы можаце аб'явіць 2D-масіў наступным чынам:

//2d array of ints
int array2D[3][2];

Гэта дэкларацыя азначае, што вы аб'яўляеце масіў з 3 радкоў і 2 слупкоў. Вы можаце ўявіць гэты масіў наступным чынам:

Нягледзячы на ​​тое, што гэта 2D-масіў, але размяшчэнне памяці для гэтага вышэй масіва будзе сумежным:

Вось прыклад доступу да двухмернага масіва:

//initialize 2D array:
for (int i = 0; i < 3; ++i)
	for (int j = 0; j < 2; ++j)
		array2D[i][j] = i + j;
//display 2d array
for (int i = 0; i < 3; ++i){
	for (int j = 0; j < 2; ++j)
		cout << array2D[i][j] << "  " ;
	cout << endl;

Выхад для адлюстравання 2D-масіва:

0 1
1 2
2 3

3D-масіў

3D-масіў - гэта масіў з 3 індэксамі:

//3d array of ints
int array3D[3][5][4];

Ёсць некалькі спосабаў уявіць, што такое 3D-масіў. Мы хацелі б парэкамендаваць вам уявіць 3D-масіў кнігай табліц з аднолькавай колькасцю радкоў і слупкоў на кожнай старонцы. У гэтым выпадку першы індэкс - гэта нумар старонкі, другі - нумар радка на старонцы, а трэці - нумар слупка на старонцы:

Ініцыялізацыя 3D-масіва:

	
for (int i = 0; i < 3; ++i)
	for (int j = 0; j < 5; ++j)
		for (int k = 0; k < 4; ++k)
			array3D[i][j][k] = i + j - k;

Макет памяці для 3D-масіваў, як і для ўсіх масіваў, сумежны.

Вы можаце надрукаваць гэты масіў наступным чынам:

for (int i = 0; i < 3; ++i){
	cout << "Page #" << i << endl;
	for (int j = 0; j < 5; ++j)
	{
		for (int k = 0; k < 4; ++k)
			cout << array3D[i][j][k] << " ";
		cout << endl;
	}
}

Выхад для 3D-масіва:

старонка #0
0 -1 -2 -3
1 0 -1 -2
2 1 0 -1
3 2 1 0
4 3 2 1
старонка #1
1 0 -1 -2
2 1 0 -1
3 2 1 0
4 3 2 1
5 4 3 2
старонка #2
2 1 0 -1
3 2 1 0
4 3 2 1
5 4 3 2
6 5 4 3

Як бачыце, 3D-масіў - гэта масіў 2D-масіваў.