728x90
배열 : C에서 C++로
∙ 배열이란?
- 같은 종류의 데이터가 연속적으로 저장되어 있는 자료 구조
ex) 다섯 학생의 점수를 저장하려면?
int score1, score2, score3, score4, score5; |
만약 학생의 수가 더 많으면 하나하나 입력하기 힘듦,,,,
int score[5]; |
그렇기에 위처럼 배열을 선언하면 관리하기 편하다.
∙ 배열의 특징
- 인덱스(index)를 사용하여 원하는 원소(element)에 곧바로 접근 가능 : O(1)
- 캐시 지역성 (cache locality)
> 배열의 각 원소는 서로 인접해 있기 때문에 하나의 원소에 접근할 때 그 근방에 있는 원소도 함께 캐시로 가져옴
- 반복문에서 배열을 사용하면 효율적인 프로그래밍이 가능
- 상수 또는 상수표현식으로 크기를 지정(크기 불변)
- 스택 메모리 영역에 할당 -> 보통 1MB 할당
∙ 실습
#include <iostream>
using namespace std;
int main()
{
//배열을 초기화을 안하면 쓰레기 값이 들어감.
int scores[5] = {50, 60, 70, 80, 90};
//sizeof(scores)는 4bytes짜리가 5개 있어 20bytes이다.
int sz = sizeof(scores) / sizeof(int);
int s = 0;
for (int i = 0; i < sz; i++){
s += scores[i];
}
float m = (float) s / sz;
cout << "Mean score:" << m << endl;
}
∙ 2차원 배열
∙ 실습
#include <iostream>
using namespace std;
int main()
{
int mat[2][3] = {{1,2,3},{4,5,6}};
int sum = 0;
for (int i = 0; i < 2; i++){
for(int j = 0; j < 3; j++){
sum += mat[i][j];
}
}
cout << "2차원 배열:" << sum <<endl;
}
∙ std::array란?
- C++에서 C스타일 배열을 대체하는 고정 크기 컨테이너
- 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿
- <array> 헤더 파일에 정의되어 있음
∙ std::array 특징
- C스타일 배열처럼 사용할 수 있는 [] 연산자 오버로딩을 제공
- 대입 연산자 지원 (깊은 복사)
- 배열 크기를 정확하게 알 수 있음 -> array::size()
- 반복자 지원
- std::array 단점
> 배열의 크기를 명시적으로 지정해야 함
> 항상 스택 메모리를 사용
> 고정 크기 배열이 아닌 가변 크기 배열을 더 선호함
∙ 실습
#include <iostream>
//array 클래스를 사용
#include <array>
using namespace std;
int main()
{
//C스타일하고 선언하는 방법이 다름
array<int, 5> scores = {50, 60, 70, 80, 90};
int s = 0;
for (int i = 0; i < scores.size(); i++){
s += scores[i];
}
float m = (float) s / scores.size();
cout << "Mean score:" << m << endl;
}