본 내용은 [C++] 어서와! 자료구조와 알고리즘은 처음이지? 프로그래밍 강의를 토대로 작성하였습니다.
- 배열(array)이란?
- 같은 종류의 데이터가 연속적으로 저장되어 있는 자료 구조
- 메모리 주소는 시작 주소, 자료형의 크기, 인덱스 값을 조합해서 알아낼 수 있음
- 배열의 특징
- 인덱스(index)를 사용하여 원하는 원소(element)에 곧바로 접근 가능: O(1)
- 캐시 지역성(cahce locality) : 배열의 각 원소는 서로 인접해 있기 때문에 하나의 원소에 접근할 때 그 근방에 있는 원소도 함께 캐시(cache)로 가져옴
- 캐시(cache)*: 컴퓨터 구조 관점에서 CPU에 가까이 있는 고속 메모리 버퍼
- 반복문에서 배열을 사용하면 효율적인 프로그래밍이 가능
- 상수 또는 상수표현식으로 크기를 지정(크기 불변)
- 스택 메모리 영역에 할당 → 스택 메모리는 보통 1MB 할당
- 따라서 너무 큰 크기의 배열 선언하면 스택 오버플로 에러 발생
#include <iostream>
using namespace std;
int main()
{
//배열 만들 때 초기화 하지 않으면
//garbage value가 들어가게 됨
//그래서 {}를 이용해서 초기화 해줌 (0으로 초기화)
int scores[5] = {50,60,70,80,90};
//배열의 크기
//sizeof는 ()안 변수의 실제 메모리 크기 반환
//int sz = sizeof(scores) / sizeof(int);
// == 20/4 = 5 , == sizeof(scores) / sizeof(scores[0])
//scores배열에 들어있는 element 크기를 반환
int sz = std::size(scores);
int s = 0;
for (int i = 0; i < sz; i++)
{
s += scores[i];
}
float m = (float)s / sz;
cout << "Mean score: " << m << endl;
return 0;
}
- C 스타일 배열
- C 스타일 2차원 배열
- C 스타일 2차원 배열
- std::array란?
- C++에서 C 스타일 배열을 대체하는 고정 크기 컨테이너 (C++11)
- 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿
- <array> 헤더 파일에 정의되어 있음
-
template<class T, std::size_t N> struct array; T: 데이터 타입, N: 원소의 갯수
- std::array 특징
- C 스타일 배열처럼 사용할 수 있는 [] 연산자 오버로딩*을 제공
- 대입 연산자 지원 (깊은 복사*)
- 배열의 크기를 정확하게 알 수 있음. array::size().
- 반복자 지원
- 예제코드
- std::arrray 단점
- 배열의 크기를 명시적으로 지정해야 함
- 항상 스택 메모리*를 사용 (대용량 데이터를 저장하는 용도로 사용할 수 없음)
- 고정 크기 배열이 아닌 가변 크기 배열을 더 선호함
- 따라서 std::array 보단 std::vector가 많이 사용됨
캐시: 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소
[Server] Cache(캐시)란? - MangKyu's Diary (tistory.com)
연산자 오버로딩: C++ 에서 제공하는 기본 타입이 아닌 클래스 타입, 즉 사용자 정의 타입에도 연산자를 사용할 수 있게 하는 문법
[C++] 연산자 오버로딩(Overloading) (tistory.com)
깊은 복사:
[C++] 얕은 복사(shallow copy) vs 깊은 복사(deep copy) :: Bright Dev Archive (tistory.com)
스택 메모리:
프로그램이 자동으로 사용하는 임시 메모리 영역
함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역이고, 함수 호출이 완료되면 사라짐
메모리의 구조 (코드, 데이터, 힙, 스택 영역) (tistory.com)
'C++' 카테고리의 다른 글
[C++] 참조(Reference) (0) | 2022.01.22 |
---|---|
[C++] Bool 데이터형 (0) | 2022.01.21 |
[C++] 입력(Input) (0) | 2022.01.21 |
[C++] 출력(Output) (0) | 2022.01.04 |
Overriding, Virtual 함수 (0) | 2021.09.14 |
댓글