본문 바로가기
자료구조

배열

by 송파감자 2025. 1. 28.
  • 배열 넘 쉽지만...기초 정리 -> 개념만 이해 ^^
  • 코테에서는 vector 쓰는 게 속편하다

1. 예시 코드

 

2. 배열의 차원

  • 1차원 말고 2차원, 3차원...같은 다차원 배열도 메모리에 연속 할당됨. (1차원 공간에!)
  • 배열로 선언한 변수는 메모리의 연속된 공간에 할당됨

왜 주소 출력할 때 static_cast<const void*>를 썼는가하면? 안 쓰면 ChAry 주소 출력할 때 중국어 나옴. 근데 그 이유는?

  • GPT 답변... 무슨 말?..
    • char* 타입의 주소는 cout로 출력할 때 문자열(char 배열)로 간주 -> 해당 주소부터 \0이 나올 때까지의 문자들을 출력하려고 시도 -> 의도치 않은 결과 출력..
    • C++에서 void*는 **모든 포인터 타입을 저장할 수 있는 "포인터의 공통 타입"**입니다.
    • void*는 어떤 타입의 데이터를 가리키는지 정보를 포함하지 않음
      • 즉, void*로 변환하면 데이터의 타입과 무관하게 그저 메모리 주소로 처리
  • 어쨌든 난 이걸로 각 원소들의 메모리 주소가 연속적인 걸 보여주려고 했음
  • 16진수라 한번에 보기 어려우니 설명은 아래와 같다

 

3. 16진수 막간 설명

  • 16진수는 0부터 F까지 구성되어 있다 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
  • int는 4바이트 할당되는디
  • 끝에 2개씩만 16진수->10진수로 바꿔보겠다 : 98, 9C,  A0 

  • 각각 152, 156, 160! 4바이트씩 연속되어 있다는 걸 알 수 있당

4. 2차원 배열

 

5. 배열 효율성

  • 배열은 인덱스가 있으니까 인덱스로 한번에 접근 쌉 가능
    • 데이터에 접근하는 시간 복잡도 O(1)
  • 배열에 데이터 추가할 때는????  -> 어디에 추가하냐에 따라 달라짐
    • 맨 뒤 추가 시 :  O(1)

Ary[3] = 4; 이렇게 한방에 추가 가능하니까 O(1)

  • 맨 앞 추가 시 : O(N)

맨 앞에 넣으면 기존 데이터들 한 칸씩 밀어줘야 햄..

  • 중간 삽입 시 :  O(N)
    • 얘는 그림 생략! ^^ 최악의 경우 맨 앞 추가할 수 있으니까 O(N)임

'자료구조' 카테고리의 다른 글

집합  (1) 2025.02.03
STL- 큐  (0) 2025.01.28
SLT-스택  (0) 2025.01.27
STL 컨테이너 4 - 정렬되지 않은 셋 & 맵  (0) 2025.01.24
STL 컨테이너 3 - 맵  (0) 2025.01.24