소개
이 랩에서는 C++ 의 배열에 대해 배우게 됩니다. 배열을 정의하고 초기화하는 방법과 배열 함수를 사용하는 방법을 배우게 됩니다.
이 랩에서는 C++ 의 배열에 대해 배우게 됩니다. 배열을 정의하고 초기화하는 방법과 배열 함수를 사용하는 방법을 배우게 됩니다.
배열은 동일한 유형의 데이터를 저장하는 데 일반적으로 사용됩니다. 배열은 효율적이고, 컴팩트하며, 접근하기 쉽습니다. 루프와 결합하면 배열 내 요소에 대한 연산이 매우 간단해집니다.
배열을 생성하려면 배열의 길이 (또는 크기) 를 미리 알고 그에 따라 할당해야 합니다. 배열이 생성되면 길이는 고정되며 변경할 수 없습니다.

30 명의 학생의 성적 평균을 구하고 싶다고 가정해 봅시다. mark1, mark2, ..., mark30과 같은 30 개의 변수를 생성하고 싶지는 않을 것입니다. 대신, 30 개의 요소를 가진 배열이라는 단일 변수를 사용할 수 있습니다.
배열은 대괄호 [ ]로 식별되는 동일한 유형의 요소 목록입니다. 배열을 사용하려면 이름, 유형 및 차원(또는 크기 또는 길이) 의 3 가지로 배열을 선언해야 합니다. 배열에는 복수형 이름을 사용하는 것이 좋습니다. 예를 들어, marks, rows, numbers와 같습니다. 예를 들어,
int marks[5]; // 5 개의 요소를 가진 marks 라는 int 배열 선언
double numbers[10]; // 10 개의 요소로 구성된 double 배열 선언
const int SIZE = 9;
float temps[SIZE]; // const int 를 배열 길이로 사용
// 일부 컴파일러는 배열 길이로 변수를 지원합니다. 예를 들어,
int size;
cout << "Enter the length of the array: ";
cin >> size;
float values[size];
C++ 에서 선언 후 요소의 값은 정의되지 않음에 유의하십시오.
다음과 같이 쉼표로 구분된 값 목록으로 선언 중에 배열을 초기화할 수도 있습니다.
// 3 개의 요소로 구성된 int 배열을 선언하고 초기화합니다.
int numbers[3] = {11, 33, 44};
// 길이가 생략되면 컴파일러가 요소를 계산합니다.
int numbers[] = {11, 33, 44};
// 초기화의 요소 수는 길이보다 작거나 같아야 합니다.
int numbers[5] = {11, 33, 44}; // 나머지 요소는 0 입니다. 혼란스럽습니다! 이렇게 하지 마세요.
int numbers[2] = {11, 33, 44}; // ERROR: 너무 많은 초기화자
// {0} 또는 {}를 사용하여 모든 요소를 0 으로 초기화합니다.
int numbers[5] = {0}; // 첫 번째 요소는 0, 나머지도 0
int numbers[5] = {}; // 모든 요소도 0
/* Test local array initialization */
#include <iostream>
using namespace std;
int main() {
int const SIZE = 5;
int a1[SIZE]; // Uninitialized
for (int i = 0; i < SIZE; ++i) cout << a1[i] << " ";
cout << endl; // ? ? ? ? ?
int a2[SIZE] = {21, 22, 23, 24, 25}; // All elements initialized
for (int i = 0; i < SIZE; ++i) cout << a2[i] << " ";
cout << endl; // 21 22 23 24 25
int a3[] = {31, 32, 33, 34, 35}; // Size deduced from init values
int a3Size = sizeof(a3)/sizeof(int);
cout << "Size is " << a3Size << endl; // 5
for (int i = 0; i < a3Size; ++i) cout << a3[i] << " ";
cout << endl; // 31 32 33 34 35
int a4[SIZE] = {41, 42}; // Leading elements initialized, the rests to 0
for (int i = 0; i < SIZE; ++i) cout << a4[i] << " ";
cout << endl; // 41 42 0 0 0
int a5[SIZE] = {0}; // First elements to 0, the rests to 0 too
for (int i = 0; i < SIZE; ++i) cout << a5[i] << " ";
cout << endl; // 0 0 0 0 0
int a6[SIZE] = {}; // All elements to 0 too
for (int i = 0; i < SIZE; ++i) cout << a6[i] << " ";
cout << endl; // 0 0 0 0 0
for (int i=0;i<5;i++){
// assign a value for each element of the array, like this
a6[i] = i;
cout << a6[i] << " ";
}
}
출력:
6299128 0 485160213 32595 0 ## some unexpected values
21 22 23 24 25
Size is 5
31 32 33 34 35
41 42 0 0 0
0 0 0 0 0
0 0 0 0 0
0 1 2 3 4

sizeof(arrayName)/sizeof(arrayName[0]) 표현식을 사용하여 배열 길이를 찾을 수 있습니다. 여기서 sizeof(arrayName)은 배열의 총 바이트 수를 반환하고 sizeof(arrayName[0])은 첫 번째 요소의 바이트 수를 반환합니다.
배열은 루프와 함께 사용됩니다. 루프를 통해 배열의 모든 요소를 처리할 수 있습니다. C++11 은 배열을 반복하기 위해 범위 기반 for 루프 (또는 for-each 루프) 를 도입했습니다. 예를 들어,
/* Testing For-each loop */
#include <iostream>
using namespace std;
int main() {
int numbers[] = {11, 22, 33, 44, 55};
// For each member called number of array numbers - read only
for (int number : numbers) {
cout << number << " ";
}
// To modify members, need to use reference (&)
for (int &number : numbers) {
number = 99;
}
for (int number : numbers) {
cout << number << endl;
}
return 0;
}
출력:
11 22 33 44 55
99 99 99 99 99

예를 들어,
int[2][3] = { {11, 22, 33}, {44, 55, 66} };

/* Test Multi-dimensional Array */
#include <iostream>
using namespace std;
void printArray(const int[][3], int);
int main() {
int myArray[][3] = {{8, 2, 4}, {7, 5, 2}}; // 2x3 initialized
// Only the first index can be omitted and implied
printArray(myArray, 2);
return 0;
}
// Print the contents of rows-by-3 array (columns is fixed)
void printArray(const int array[][3], int rows) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < 3; ++j) {
cout << array[i][j] << " ";
}
cout << endl;
}
}
출력:
8 2 4
7 5 2

C 에서 문자열은 NULL 문자 '\0'(16 진수 코드 0) 로 종료되는 char 배열입니다. C++ 은 헤더 <string> 아래에 새로운 string 클래스를 제공합니다. C 의 원래 문자열은 C-String(또는 C 스타일 문자열 또는 문자열) 로 알려져 있습니다. 다음과 같이 C-string 을 할당할 수 있습니다.
char message[256]; // char 배열 선언
// '\0'으로 종료되는 최대 255 자리의 C-String 을 저장할 수 있습니다.
char str1[] = "Hello"; // "문자열 리터럴"로 선언 및 초기화합니다.
// 배열의 길이는 문자 수 + 1('\0'을 위해) 입니다.
char str1char[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 위와 동일
char str2[256] = "Hello"; // 배열의 길이는 256 이며, 더 작은 문자열을 유지합니다.
초보자의 경우 C-string 을 피하십시오. 앞서 논의한 C++ string(헤더 <string>에 있음) 을 사용하십시오.
cin과 cout을 사용하여 C-string 을 처리할 수 있습니다.
cin <<는 공백으로 구분된 문자열을 읽습니다.cin.getline(*var*, *size*)는 var에 최대 size-1 길이의 문자열을 읽어 들여 줄 바꿈 문자를 버립니다 ('\0'로 대체). *size*는 일반적으로 C-string 배열의 길이에 해당합니다.cin.get(*var*, *size*)는 줄 바꿈까지 문자열을 읽지만 입력 버퍼에 줄 바꿈 문자를 남겨둡니다.cin.get()은 다음 문자를 읽습니다./* Test C-string */
#include <iostream>
using namespace std;
int main() {
char msg[256]; // Hold a string of up to 255 characters (terminated by '\0')
cout << "Enter a message (with space)" << endl;
cin.getline(msg, 256); // Read up to 255 characters into msg
cout << msg << endl;
// Access via null-terminated character array
for (int i = 0; msg[i] != '\0'; ++i) {
cout << msg[i];
}
cout << endl;
cout << "Enter a word (without space)" << endl;
cin >> msg;
cout << msg << endl;
// Access via null-terminated character array
for (int i = 0; msg[i] != '\0'; ++i) {
cout << msg[i];
}
cout << endl;
return 0;
}
출력:
Enter a message (with space)
hello, how are you?
hello, how are you?
hello, how are you?
Enter a word (without space)
helloworld
helloworld
helloworld

C/C++ 는 배열 인덱스 경계 검사를 수행하지 않습니다. 즉, 인덱스가 배열의 범위를 벗어나도 경고/오류를 발생시키지 않습니다. 그럼에도 불구하고 길이를 추정하고 상한을 할당해야 합니다. 이것이 아마도 배열을 사용하는 주요 단점일 것입니다. C++ 에는 동적으로 크기를 조정할 수 있는 배열을 지원하는 vector 템플릿 클래스가 있으며 (C++11 은 array 템플릿 클래스를 추가했습니다).