E D R , A S I H C RSS

루프는0부터?


어째서 C� 루프는 0부터 루프를 시작하는지... 사람들 헛갈리게 왜 0부터 시작하는지...
AcceleratedC++� AcceleratedC++/Chapter2�서 �야기 ��군요.
간단히 옮겨 봅니다.

AcceleratedC++ � 내용 부분 발췌

1. 루프� 카운트� 초기값� 0으로 설정하는 �유

대부분� 경험있는 C++프로그래머들�, 처��는 ��하다고 ��할만한 프로그래� 습관� 가지고 있습니다. 그것� 바로 번호를 매길 때� 언제나 1부터 시작하는 것� 아니� 0부터 시작한다는 것입니다.
for(int r=0; r!=rows; ++r)
for(int r=1; r<=rows; ++r)
첫번째 것� 0부터 번호를 매기고 !=를 사용하는� 반해, �번째 것� 1부터 번호를 매기고 <=로 비�합니다. 반복횟수는 둘다 ��합니다. �번째 것보다 첫 번재 것� � 성호하는 �유가 있�까요?

1.1. 첫번째 �유 : 비대칭 �� 범위를 사용하기 때문� 범위를 설명하기 쉽기 때문�다.

첫번째 for문� [0, rows)를 사용하는 것� 편하고, �번째 for문� 1, rows를 사용하는것� � 편하다.
보통 비대칭형 범위는 대칭형 범위보다 � 사용하기 쉽습니다. 왜�하면 다�과 같� 중요한 �성� 있기 때문입니다. [m, n)과 같� 형�� 범위는 n-m개� 요소들� 가지며 m,n� 형�� n-m+1� 요소들� 가집니다. 따�서 [0, rows)�서 요소들� 개수는 �관��� 반해, 1, rows�서 요소들� 개수는 � �관� 입니다. �러한 �성차�는, 특히 빈 범위� 경우� � 뚜렷합니다. 만약 비 대칭형 범위를 사용한다면, 빈 범위를 [m,n)으로 표현할수 있지만, 대칭형 범위�서는 n, n-1� 사용해야 합니다. 범위� �� 시작보다 � 작�수 있따는 가능성� 프로그램 설계시 �� 정��지 않아 버리는 문제를 야기 시킬수 있습니다.

1.2. �번째 �유 : 루프 불변�� � 쉽게 표현할 수 있기 때문�다.

0부터 번호를 매기면 불변�� � �관�입니다.
지금까지 rê°œì�˜ í–‰ì�„ ìœë ¥í–ˆë”°ê³  표현할 수 있기 때문입니다. 만약 1부터 번호를 매긴다면? ì�´ì œë§‰ r번째 í–‰ì�„ ìœë ¥í•˜ë ¤ëŠ” 찰나ë�¼ê³  ì •ì�˜í•  수ë�„ 있겠지만, 그러한 구문ì�€ 불변ì‹�으로 정당치 않습니다. 왜ëƒ�하면, whileì�´ ì¡°ê±´ì‹�ì�„ 마지막으로 검사할때, rows+1ì�´ ë�˜ê¸° 때문입니다. ì�´ë•Œ 우리가 ì›�하는 것ì�€ rows행만ì�„ ìœë ¥í•˜ëŠ” 것 입니다. ë”°ë�¼ì„œ 우리는 r번째 í–‰ì�„ 막 ìœë ¥ 하려ë�˜ 것ì�´ 아닌 ì…ˆì�´ ë�©ë‹ˆë‹¤. 지금까지 r-1ê°œì�˜ 행들ì�„ ìœë ¥í–ˆë‹¤ê³  불변ì‹�ì�„ ì •ì�˜í•  수ë�„ 있ì�„ 것입니다. 하지만 불변ì‹�ì�„ 그런ì‹�으로 ì •ì�˜ 햇다면, rì�„ 0부터 시작시켜 단순화 시키는 것ì�´ ë�” ë‚«ì§€ 않ì�„까요?

1.3. 세번째 �유 : 비�를 위해 <=를 사용하는 대신 !=를 사용할수 있다는 것 입니다.

사소한 것�지 모르지만, 루프가 �날 때 우리가 �작 할 수 있게 �는 프로그램� �태 정보� �향� 줄 수 있습니다.
ì¡°ê±´ì‹�ì�´ r!=rowsë�¼ë©´, 루프가 ë��ë‚  때 r==rowsë�¼ëŠ” 사실ì�„ 알수 있습니다. 불변ì‹�ì�€ rê°œì�˜ í–‰ì�„ ìœë ¥í–ˆë”°ëŠ” 사실ì�„ ë§�í•´ 주기 때문ì—�, 정확히 rowsê°œì�˜ í–‰ì�„ ìœë ¥í–ˆë‹¤ëŠ” 것ì�„ 알 수 있습니다. 한편, 만약 ì¡°ê±´ì‹�ì�´ <=rowsë�¼ë©´, 그로부터 알 수 있는 사실ì�€ 최소한 rowsê°œì�˜ í–‰ì�„ 출력했다는 사실 ë¿�입니다. ë”°ë�¼ì„œ ê·¸ ì�´ìƒ�ì�„ 출력했ì�„ 수ë�„ 있는 것입니다. 0부터 번호를 매기게 ë�˜ë©´ 정확히 rows번ì�˜ 반복ì�„ 수행했는지 확실히 하고ìž� í•  때, R!=rows를 ì¡°ê±´ì‹�으로 사용할 수 있습니다. ë˜�한, 반복횟수가 rows번 ë˜�는 ê·¸ ì�´ìƒ�ì�´ ë�˜ê¸°ë§Œì�„ ì›�한다면, r

��� 다�스트�가 그 �유를 �혀놓았습니다. Seminar:WhyNumberingShouldStartAtZero

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:23
Processing time 0.0060 sec