728x90
Array
- 정적배열
- 선언 시 보통 크기를 설정해서 연산 진행
- 연속된 메모리 공간에 위치한 같은 타입의 요소들의 모음이며 숫자인덱스를 기반으로 랜덤접근이 가능하며 중복을 허용
선언 타입
- c 스타일과 std 스타일이 존재
- c 스타일
- int a[10] 과 같이 선언
- std 스타일
- array<int, 10> a; 이렇게 선언
특징
- vector와는 달리 메서드가 xxxxx
- 배열의 크기를 정해서 선언할 수도 있음
- int a[3]
- 크기를 정하지 않고 선언하되 배열을 중괄호로 요소들을 할당할 수도 있음
- int a2[] = {1, 2, 3, 4}
- 위 코드처럼 하게 되면 자동적으로 rvalue의 크기로 할당되어 int a2[] 는 int a2[4] 와 같은 의미를 가진다.
예시 코드
#include <bits/stdc++.h>
using namespace std;
int a[3] = {1,2,3};
int a2[] = {1,2,3,4};
int a3[10];
int main(){
for(int i = 0; i < 3; i++) cout << a[i] << " ";
cout << '\n';
for(int i : a) cout << i << " ";
for(int i = 0; i < 4; i ++) cout << a2[i] << " ";
cout << '\n';
for(int i : a2) cout << i << " ";
for(int i = 0; i < 10; i++) a3[i] = i;
cout << '\n';
for(int i : a2) cout << i << " ";
return 0;
}
/*
1 2 3
1 2 3 1 2 3 4
1 2 3 4
1 2 3 4
*/
- Arrya, vector와 같은 배열은
- 같은 타입의 변수들로 이루어져 있고
- 크기가 정해져 있으며
- 인접한 메모리위치에 있는 데이터들을 모아놓은 집합
2차원 배열과 탐색을 빠르게 하는 팁
- 단순하게 차원을 늘려서 만들면 된다.
#include <bits/stdc++.h>
using namespace std;
const int mxy = 3;
const int mxx = 4;
int a[mxy][mxx];
int main(){
for(int i = 0; i < mxy; i++){
for(int j = 0; j < mxx; j++){
a[i][j] = (i + j);
}
}
// good
for(int i = 0; i < mxy; i++){
for(int j = 0; j < mxx; j++){
cout << a[i][j] << ' ';
}
cout << '\n';
}
//bad
for(int i = 0; i < mxx; i++){
for(int j = 0; j < mxy; j++){
cout << a[j][i] << ' ';
}
cout << '\n';
}
return 0;
}
/*
0 1 2 3
1 2 3 4
2 3 4 5
0 1 2
1 2 3
2 3 4
3 4 5
*/
- 2차원 배열을 만들고 출력해보았다.
- 이 때, 첫 번째 차원 >> 2번째 차원 순으로 탐색하는게 성능이 좋다!!!
- C++에서 캐시를 첫번째 차원(여기서는 y) 를 기준으로 하기 때문에 캐시관련 효율성 때문에 탐색을 하더라도 순서를 지켜주자.
728x90
'Programming Language > C++' 카테고리의 다른 글
[C++] list with Cpp (2) | 2023.12.20 |
---|---|
[C++] Vector with Cpp (1) | 2023.12.20 |
[C++] auto와 람다식 (0) | 2023.12.20 |
[C++] 표준 템플릿 라이브러리(STL) (0) | 2023.12.20 |
[C++] 제네릭 클래스 만들기 (1) | 2023.12.19 |