-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRangeBasedFor.cpp
118 lines (115 loc) · 4.59 KB
/
RangeBasedFor.cpp
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "RangeBasedFor.h"
/// <summary>
/// 문제
/// 쉬어가는 시간!
/// 오늘은 엄청 쉬운 것을 배운다.거저 먹기식 설명을 이해하고, 거저 먹기식 문제를 풀어보자!
///
/// 크기 10의 배열이 있다고 하자.
/// 그 배열의 내용을 출력하는 프로그램을 작성하고자 한다면 여러분들은 보통 아래와 같은 프로그램을 작성할 것이다.
///
/// #include <stdio.h>
///
/// int main()
/// {
/// int arr[10] = { 1,9,9,3,0,2,2,7,2,1 }; ///예시 배열
/// int n;
///
/// for (int i = 0; i < 10; i++) printf("%d ", arr[i]); ///고전적인 방법
/// return 0;
/// }
///
/// arr[i]라는 표현은 사실 2차적인 해석을 요구하는 표현이다.
/// 우리말로 읽으면 arr배열의 i번째 원소가 된다.
/// 여기서 잠깐 생각해 보자.
///
/// ''''''
/// "i번째"라는 말이 그렇게 큰 의미가 있을까 ?
/// 예를 들어 주어진 문제가 홀수 번째만 출력하는 것이거나, 역순으로 출력하는 것 이라면 위와 같이 인덱스 i를 이용하여 "몇 번째 원소"인지를 알 필요가 있다.
/// 그러나, 위 프로그램에서 우리는 인덱스 i 자체에는 관심이 없다!i가 아닌 arr[i], 즉 arr배열의 i번째 원소에만 관심이 있는 것이다.
///
/// ''''''
///
/// 이런 경우에는 배열의 각 원소에 대해서 순회하는 방법이 조금 더 적합하다.아래 코드는 위 코드와 같은 일을 하는 코드이지만, 반복 변수 i를 사용하지 않는 방법을 보여준다.
///
/// #include <stdio.h>
///
/// int main()
/// {
/// int arr[10] = { 1,9,9,3,0,2,2,7,2,1 }; ///예시 배열
/// int n;
///
/// for (int element : arr) printf("%d ", element); ///arr 배열의 각 원소 element에 대하여
/// return 0;
/// }
///
/// 위 for문을 보면, 우리가 아는 for문과 구조가 조금 다르다는것을 알 수 있다.
/// 우리에게 익숙한 for문은 다음과 같은 구조이다.
///
/// for (①; ②; ③)
/// {
/// }
///
/// 여기서 ①은 반복 시작 시 딱 한번 실행되는 문장,
/// ②는 반복문의 중괄호 안(body)로 들어가기 위한 조건
/// ③은 반복문이 돌아올 때마다 다시 실행되는 문장이다.
///
/// 이번에 새로 배우는 for문은 다음과 같은 구조이다.
/// for (① : ②)
/// {
/// }
///
/// ②에는 배열 이름이 들어가고,
/// ①에는 배열을 구성하는 원소들과 같은 자료형으로 된 변수를 하나 선언하는 방식이다.
/// 매 반복마다 ①에서 선언한 변수가 맨 앞의 원소부터 뒤의 원소의 순서로 차례대로 대입이 된다.
///
/// 문장을 영어(를 직역한 우리말)로 읽으면 더 직관적이다.
///
/// for (int element : arr)
/// "For each element in arr..." (배열(arr)안의 모든 원소(element)에 대하여 ...)
///
/// i를 생략하면서 오는 직관성 때문에, 그리고 무엇보다도 "i번째"라는 의미없는 인덱스를 생략할 수 있기 때문에,
/// for - each문 또는 range - based for문으로 불리는 이 문법은 코드의 가독성을 향상시키는데 상당한 도움을 준다.
///
/// 이제 Intermediate Coder에서 가장 쉬울 것으로 추정되는 문제를 풀어보고 다음 문제로 넘어갈 수 있도록 하자.
///
/// -최하급 난이도 문제 -
///
/// 크기 26의 문자형(char) 배열을 선언하고,
/// for문의 고전적인 문법(for (①; ②; ③))을 이용하여 각 원소들을 앞에서부터 'A'부터 'Z'까지로 채운 후에,
/// 오늘 새로 배운 for - each문(for (① : ②))을 통해서 각 원소들을 출력하라.
///
/// 입력 형식
/// 입력은 없다. 습관성 행동으로 scanf(또는 cin)를 쓰고 있다면, 무언가 잘못하고 있는 것이다.
///
/// 출력 형식
/// 문제를 읽고, 문제에서 요구하는 방식으로 출력을 한다.
///
/// 입력 예
/// (없음)
///
/// 출력 예
/// A B C D ....(복사-붙여넣기방지).... Y Z
///
/// Hint!
/// for-each문으로 배열의 원소값을 직접 변경할 필요가 있는 경우는 참조형 변수(&으로 선언)를 사용한다.
///
/// ///int형 배열의 예시에서...
///
/// for (int& x : arr)x = 1; ///arr의 모든 원소 x를 1로 초기화.
///
/// 참고로 range based for문은 C++11 이상의 버전에서만 작동한다.
///
/// http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=729&sca=3090
/// </summary>
void RangeBasedFor::Code()
{
char arr[26];
for (int i = 0; i < 26; i++)
{
arr[i] = 'A' + i;
}
for (char c : arr)
{
std::cout << c << ' ';
}
}