본문 바로가기

코딩 및 기타/어서와! 자료구조와 알고리즘

3일차

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;
}

'코딩 및 기타 > 어서와! 자료구조와 알고리즘' 카테고리의 다른 글

6일차  (0) 2023.08.10
5일차  (0) 2023.08.09
4일차  (0) 2023.08.08
2일차  (0) 2023.08.04
1일차  (0) 2023.08.03