프로그래밍응용/Modern & STL
자료형 추론 auto / 범위 기반 for
photoner
2021. 1. 21. 00:42
728x90
반응형
다음과 같은 배열들을 순회할 것인데,
1
2
3
4
|
int numArr[10] = { 9, 57, 3, 29, 23, };
std::vector<int> numVec(&numArr[0], &numArr[5]);
const char* strArr[3] = { "I'm Shyoo", "Dog", "Mouse" };
|
cs |
전통적인(?), 일반적인 순회 방법과 auto 자동 추론을 이용한 반복과 범위 기반 반복을 각각 실험해본다.
일반적인 순회
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cout << "[기존 배열 순회 방법]" << endl;
for (int i = 0; i < 10; i++)
cout << numArr[i] << ' ';
cout << endl;
for (std::vector<int>::iterator it = numVec.begin(); it != numVec.end(); it++)
cout << *it << ' ';
cout << endl;
for(char ** p = (char **)strArr; p <= strArr+2; p++) // 억지로 계산하는게 꺼림칙하긴 하지만..
cout << *p << ' ';
cout << endl;
|
cs |
일반적인 배열, 벡터, 포인터 배열을 순회하는 평범한 코드이다.
자료형 자동 추론을 통한 순회
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cout << "[자료형 자동 추론]" << endl;
for (auto i = 0; i < 10; i++)
cout << numArr[i] << ' ';
cout << endl;
for (auto it = numVec.begin(); it != numVec.end(); it++)
cout << *it << ' ';
cout << endl;
for (auto p = (char**)strArr; p <= strArr + 2; p++)
cout << *p << ' ';
cout << endl;
|
cs |
auto 키워드를 통해서 인덱스 역할을 하는 변수의 자료형을 알아서 탐지한다.. 너무 편하다 정말
범위 기반 반복 for을 통한 순회
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cout << "[범위 기반 for문을 이용한 배열 순회]" << endl;
for (auto element : numArr)
cout << element << ' ';
cout << endl;
for (auto it : numVec)
cout << it << ' ';
cout << endl;
for(auto p : strArr)
cout << p << ' ';
cout << endl;
|
cs |
다른 언어에서 지원하는 것처럼 c++도 지원한다. 자바스크립트나 파이썬의 for in과 같고, 자바의 for each 구조와 같다.
전체 코드 및 실행 결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
int main(void)
{
int numArr[10] = { 9, 57, 3, 29, 23, };
std::vector<int> numVec(&numArr[0], &numArr[5]);
const char* strArr[3] = { "I'm Shyoo", "Dog", "Mouse" };
cout << "[기존 배열 순회 방법]" << endl;
for (int i = 0; i < 10; i++)
cout << numArr[i] << ' ';
cout << endl;
for (std::vector<int>::iterator it = numVec.begin(); it != numVec.end(); it++)
cout << *it << ' ';
cout << endl;
for(char ** p = (char **)strArr; p <= strArr+2; p++) // 억지로 계산하는게 꺼림칙하긴 하지만..
cout << *p << ' ';
cout << endl;
cout << "[자료형 자동 추론]" << endl;
for (auto i = 0; i < 10; i++)
cout << numArr[i] << ' ';
cout << endl;
for (auto it = numVec.begin(); it != numVec.end(); it++)
cout << *it << ' ';
cout << endl;
for (auto p = (char**)strArr; p <= strArr + 2; p++)
cout << *p << ' ';
cout << endl;
cout << "[범위 기반 for문을 이용한 배열 순회]" << endl;
for (auto element : numArr)
cout << element << ' ';
cout << endl;
for (auto it : numVec)
cout << it << ' ';
cout << endl;
for(auto p : strArr)
cout << p << ' ';
cout << endl;
return 0;
}
|
cs |
실행이 기가 막히게 잘되는 것을 볼 수 있다.
728x90
반응형