1차원 배열
배열의 개념
배열은 동일한 데이터 타입의 여러 변수를 연속된 메모리 공간에 저장하는 자료구조입니다.
배열을 사용하면 관련된 데이터를 효율적으로 관리하고 처리할 수 있습니다.
예를 들어, 학생들의 점수나 일일 기온 등을 저장하고 처리할 때 유용합니다.
배열의 선언과 초기화
배열 선언
int numbers[5]; // 정수형 배열 선언 (크기: 5)
이 선언은 5개의 정수를 저장할 수 있는 배열을 생성합니다.
배열 초기화
int numbers[5] = {1, 2, 3, 4, 5}; // 선언과 동시에 초기화
int scores[] = {95, 88, 76, 92, 100}; // 크기 자동 결정
첫 번째 예는 배열을 선언하면서 동시에 초기화합니다.
두 번째 예는 초기화 값의 개수에 따라 배열의 크기가 자동으로 결정됩니다.
부분 초기화
int partial[5] = {1, 2}; // {1, 2, 0, 0, 0}
초기화 값이 배열 크기보다 적으면, 나머지는 0으로 초기화됩니다.
배열 요소 접근
배열의 각 요소는 인덱스를 통해 접근할 수 있습니다. 인덱스는 0부터 시작합니다.
#include <iostream>
int main() {
int numbers[5] = {10, 20, 30, 40, 50};
std::cout << numbers[2] << std::endl; // 출력: 30
numbers[4] = 60; // 배열 요소 수정
std::cout << numbers[4] << std::endl; // 출력: 60
return 0;
}
배열과 메모리
배열은 연속된 메모리 공간에 저장됩니다. 각 요소는 타입의 크기만큼의 공간을 차지합니다.
#include <iostream>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
std::cout << "배열의 크기: " << sizeof(numbers) << " bytes" << std::endl;
std::cout << "첫 번째 요소의 주소: " << &numbers[0] << std::endl;
std::cout << "두 번째 요소의 주소: " << &numbers[1] << std::endl;
return 0;
}
이 예제는 배열의 메모리 구조를 보여줍니다. 각 요소가 연속적으로 저장되어 있음을 확인할 수 있습니다.
배열과 반복문
배열은 주로 반복문과 함께 사용됩니다.
#include <iostream>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
범위 기반 for 루프 (C++ 11 이상)
C++ 11부터는 범위 기반 for 루프를 사용하여 배열의 모든 요소를 쉽게 순회할 수 있습니다.
#include <iostream>
int main() {
int numbers[] = {1, 2, 3, 4, 5};
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
배열의 크기 계산
배열의 크기를 동적으로 계산할 때는 다음과 같은 방법을 사용합니다.
#include <iostream>
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]);
std::cout << "배열의 크기: " << size << std::endl;
return 0;
}
문자 배열과 문자열
C++에서 문자열은 문자 배열로 표현될 수 있습니다.
#include <iostream>
int main() {
char str[] = "Hello"; // {'H', 'e', 'l', 'l', 'o', '\0'}
std::cout << str << std::endl;
return 0;
}
문자열의 끝은 널 문자 '\0'
로 표시됩니다.
배열의 한계와 주의사항
- 크기가 컴파일 시간에 결정되어야 합니다.
- 범위를 벗어난 접근(배열 인덱스 오류)에 주의해야 합니다.
- 배열 전체를 한 번에 대입할 수 없습니다.
int a[5] = {1, 2, 3, 4, 5};
int b[5];
b = a; // 오류: 배열 전체 대입 불가
std::array (C++ 11 이상)
C++ 11부터는 std::array를 사용하여 더 안전하고 편리하게 배열을 다룰 수 있습니다.
#include <iostream>
#include <array>
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
std::cout << "배열의 크기: " << numbers.size() << std::endl;
std::cout << "첫 번째 요소: " << numbers.front() << std::endl;
std::cout << "마지막 요소: " << numbers.back() << std::endl;
return 0;
}
연습 문제
- 정수 배열을 선언하고 초기화한 후, 모든 요소의 합을 계산하는 프로그램을 작성하세요.
- 문자 배열을 사용하여 간단한 암호화 프로그램을 구현하세요. (힌트 : 시저 암호를 사용해보세요)
- 배열을 사용하여 간단한 성적 관리 프로그램을 작성하세요. 학생들의 점수를 입력받고, 평균, 최고점, 최저점을 계산하여 출력하세요.
- 주어진 정수 배열에서 가장 자주 등장하는 숫자(최빈값)를 찾는 프로그램을 작성하세요.
참고자료
- C++ 공식 문서의 배열 섹션 : C++ Arrays
- std::array 컨테이너 : std::array
- C++ Core Guidelines의 배열 관련 규칙 : ES.27: Use std::array or stack_array for arrays on the stack
- Effective C++ : 항목 13 "자원 관리에는 객체가 그만!" - Scott Meyers (배열과 자원 관리의 관계)