๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
C++ ๊ธฐ์ดˆ

[C/C++] 4. ๋ฐ˜๋ณต๋ฌธ(Iteration statements) - for๋ฌธ(for loop)

by ์„œ์•„๋ž‘๐Ÿ˜ 2021. 3. 29.

๋ฐ˜๋ณต-loop(์ถœ์ฒ˜: https://wearetheloop.org/about-the-loop)

 

๋ฐ˜๋ณต๋ฌธ์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ์›ํ•˜๋Š” ๋งŒํผ ๋ฐ˜๋ณต ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.(์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค.)

 

๋˜ํ•œ ์žฌ๊ท€๋ผ๋Š” ๊ฐœ๋…๋„ ๋ฐ˜๋ณต์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์žฌ๊ท€๋Š” ๋”ฐ๋กœ ํฌ์ŠคํŒ…์„ ํ•  ์˜ˆ์ •์ด๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๋ชฉ์ ์ด ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•˜๋Š”๋ฐ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋ฌธ์€ ๋งค์šฐ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค. ๊ทธ๋งŒํผ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ  ์‹ ์ค‘ํžˆ ์จ์•ผํ•  ๊ฒƒ์ด๋‹ค.

 

๋ฐ˜๋ณต๋ฌธ์ด ์ค‘์ฒฉ๋˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์‹œ๊ฐ„๋ณต์žก๋„(Big-Oํ‘œ๊ธฐ๋ฒ•์— ๋”ฐ๋ฅธ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋งํ•œ๋‹ค.)๊ฐ€ ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ๋ฐ˜๋ณต์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋งŒํผ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

 

 

# for๋ฌธ(for-loop)

for loop(์ถœ์ฒ˜: https://www.programiz.com/java-programming/for-loop)

 

// C++
#include <iostream>

for ( int idx = 0; idx < 10; idx++ )
{
	std::cout << idx << ",";
}

์œ„ ์˜ˆ์ œ๋Š” ์ „ํ˜•์ ์ธ for๋ฌธ์˜ ์˜ˆ์ œ์ด๋‹ค.(c/c++ ๋ชจ๋‘ ๋ฌธ๋ฒ•์€ ๊ฐ™๊ณ , ๋ฐ˜๋ณต๋ฌธ ๋ณธ์ฒด๋Š” c++๋กœ ํ‘œํ˜„ํ–ˆ๋‹ค)

 

for ์กฐ๊ฑด ๋‚ด ์„ธ๋ฏธ์ฝœ๋ก (;) ๋‘๊ฐœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์„ธ๋ฏธ์ฝœ๋ก ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๋ถ€ํ„ฐ 1,2,3๋ฒˆ์ด๋ผ๊ณ  ์นญํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์˜ ๋ณธ์ฒด๋ฅผ 4๋ฒˆ์ด๋ผ๊ณ  ์นญํ•˜๊ฒ ๋‹ค.

 

1๋ฒˆ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•  ์ธ๋ฑ์Šค์˜ ์ดˆ๊ธฐํ™”๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.

2๋ฒˆ์—์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๋ฐ˜๋ณต์˜ ์กฐ๊ฑด์„ ํ‘œํ˜„ํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋…ผ๋ฆฌํŒ๋‹จ์ด๋ฏ€๋กœ true์ด๋ฉด ๋ฐ˜๋ณต๊ตฌ๋ฌธ์„ ์ง„ํ–‰ํ•˜๊ณ , false์ด๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋‚˜๊ฐ„๋‹ค.

3๋ฒˆ์—์„œ๋Š” ์ธ๋ฑ์Šค์˜ ์ฆ๊ฐ์„ ํ†ตํ•ด ๋ฐ˜๋ณต์˜ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋‚˜์•„๊ฐ„๋‹ค.

4๋ฒˆ์—์„œ๋Š” ๋ฐ˜๋ณต์„ ์ง„ํ–‰ํ•  ๊ตฌ๋ฌธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

์œ„ ์˜ˆ์ œ์—์„œ๋Š” ์ธ๋ฑ์Šค๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 10๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—๋งŒ ๋ฐ˜๋ณต๊ตฌ๋ฌธ์„ ์ง„ํ–‰ํ•œ๋‹ค. ํ•œ๋ฒˆ ๋ฐ˜๋ณต๊ตฌ๋ฌธ์ด ์ง„ํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ธ๋ฑ์Šค๋Š” 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด 10๋ฒˆ์— ๊ฑธ์ณ์„œ ์ฆ๊ฐ€๋œ ์ธ๋ฑ์Šค๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.(0,1,2,3,4,5,6,7,8,9,)

 

for๋ฌธ์ด ์ง„ํ–‰๋˜๋Š” ์ˆœ์„œ๋Š” 1(์ธ๋ฑ์Šค ์ดˆ๊ธฐํ™”) → 2(๋ฐ˜๋ณต ์กฐ๊ฑด ํ™•์ธ) → 4(๋ฐ˜๋ณต ๊ตฌ๋ฌธ ์‹คํ–‰) →3(์ธ๋ฑ์Šค ์ฆ๊ฐ) → 2(๋ฐ˜๋ณต ์กฐ๊ฑด ํ™•์ธ) → 4(๋ฐ˜๋ณต ๊ตฌ๋ฌธ ์‹คํ–‰) →3(์ธ๋ฑ์Šค ์ฆ๊ฐ) ... ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

 

์ฆ‰, ์ดˆ๊ธฐํ™”์‹ ์ดํ›„๋กœ 2, 4, 3 ์ˆœ์œผ๋กœ ๋ฐ˜๋ณต ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋ฐ˜๋ณต์ด ์ง„ํ–‰๋œ๋‹ค.

 

for๋ฌธ ์ž‘๋™ ๋ฐฉ์‹(์ถœ์ฒ˜: https://coding-factory.tistory.com/382)

 

 

 

// C/C++
// ์ดˆ๊ธฐํ™” ์ƒ๋žต
int idx = 0;
for (; idx < 10; idx++)
{
	printf("%d, ", idx);
}

// ๋ฐ˜๋ณต ์กฐ๊ฑด์‹ ์ƒ๋žต
for (int idx = 0;; idx++)
{
	printf("%d, ", idx);
}

// ๋ฐ˜๋ณต ์ง„ํ–‰์‹ ์ƒ๋žต
for (int idx = 0; idx < 10;)
{
	printf("%d, ", idx);
}

// ๋ชจ๋‘ ์ƒ๋žต
for (;;)
{
	printf("%d, ", idx);
}

์œ„ ์˜ˆ์ œ์—์„œ๋Š” ์ดˆ๊ธฐํ™”์‹, ์กฐ๊ฑด์‹, ์ง„ํ–‰์‹์„ ์ƒ๋žตํ•œ๋‹ค. ๋ฌธ๋ฒ•์ƒ์œผ๋กœ ๋ฌธ์ œ๋Š” ์—†์œผ๋‚˜ ์ดˆ๊ธฐํ™”์‹์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ˜๋ณต๋ฌธ์€ ๋ฌดํ•œ๋ฃจํ”„๋กœ ๋น ์ง€๊ฒŒ ๋œ๋‹ค.

 

// C++ 11
#include <vector>

std::vector<int> vec = {0,1,2,3,4,5};
for ( int val : vec )
{
	printf("%d, ", val);
}

์œ„ ์˜ˆ์ œ๋Š” c++ 11์—์„œ ์ƒˆ๋กœ ๋„์ž…๋œ ๋ฒ”์œ„๊ธฐ๋ฐ˜ for๋ฌธ์„ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ˜๋ณต์ž(iterator)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, begin(), end()๋ฅผ ๊ฐ€์ง„ STL(c++ standard library)์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ ๋ฒ”์œ„๊ธฐ๋ฐ˜ for๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

STL(c++ standard library)์ปจํ…Œ์ด๋„ˆ๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ std::vector, std::array, std::map, std::set ๋“ฑ์ด ์žˆ๋‹ค.

 

๋ฒ”์œ„ ๊ธฐ๋ฐ˜ for๋ฌธ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์›์†Œ๋“ค์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋‹ค๋งŒ begin๋ถ€ํ„ฐ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ for๋ฌธ ์ฒ˜๋Ÿผ ํŠน์ • ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐ˜๋ณต ๊ตฌ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ํ•  ์ˆ˜๋Š” ์—†๋‹ค.(๋ฌผ๋ก  ์ด๊ฒƒ๋„ ๋ฐ˜๋ณตํ•˜๋Š” ์›์†Œ๋ฅผ ๋น„๊ตํ•ด์„œ ์กฐ๊ฑด ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‚˜ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ๋‹ค.)

 

# ํ๋ฆ„์ œ์–ด๋ฌธ(flow control statements)

ํ๋ฆ„์ œ์–ด๋ฌธ์€ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ์ค‘ ํ๋ฆ„์„ ๋Š๊ฑฐ๋‚˜ ๊ฑด๋„ˆ ๋›ธ ์ˆ˜ ์žˆ๋Š” '์ง€์ •์ž'๋ฅผ ๋œปํ•œ๋‹ค.

 

ํฌ๊ฒŒ continue์™€ break๊ฐ€ ์žˆ๋‹ค. goto๋ฌธ์€ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ๋‹ค.(์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›ฌ๋งŒํ•˜๋ฉด ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์‹ฌ์‹ ์— ์ข‹๋‹ค.)

# continue

#include <stdio>

for ( int idx = 0; idx < 10; idx++ )
{
	if ( idx % 2 == 1 )
		continue;
        
    printf("%d, ");
}
๋”๋ณด๊ธฐ

์ถœ๋ ฅ ๊ฒฐ๊ณผ

0, 2, 4, 6, 8, 

์œ„ ์˜ˆ์ œ๋Š” ํ™€์ˆ˜์˜ ๊ฒฝ์šฐ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ๊ฑด๋„ˆ ๋›ด๋‹ค.

 

๋ฐ˜๋ณต ๊ตฌ๋ฌธ ๋‚ด์—์„œ continue๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ๋ฐ˜๋ณต์€ ์ฆ‰์‹œ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค์Œ ๋ฐ˜๋ณต์„ ์ง„ํ–‰ํ•œ๋‹ค. continue๋ฅผ ํ†ตํ•ด์„œ ์›์น˜ ์•Š๋Š” ๋ฐ˜๋ณต์€ ๊ฑด๋„ˆ ๋›ธ ์ˆ˜ ์žˆ๋‹ค.

# break

#include <stdio>

for ( int idx = 0; idx < 10; idx++ )
{
	if ( idx % 2 == 1 )
		break;
        
    printf("%d, ");
}
๋”๋ณด๊ธฐ

์ถœ๋ ฅ๊ฒฐ๊ณผ

0, 

๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ break๋ฅผ ๋งŒ๋‚˜๋ฉด ์ฆ‰์‹œ ๋ชจ๋“  ๋ฐ˜๋ณต์„ ์ข…๋ฃŒํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค. ์œ„ ์˜ˆ์ œ์—์„œ๋Š” ํ™€์ˆ˜์˜ ๊ฒฝ์šฐ break๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— idx == 1์ผ ๋•Œ break๋ฅผ ๋งŒ๋‚˜๊ณ , ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค.

 

break๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ์›ํ•˜๋Š” ์ž‘์—…์„ ๋๋ƒˆ์„ ๋•Œ, ๋ถˆํ•„์š”ํ•œ ๋‚จ์€ ๋ฐ˜๋ณต์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋‹ค.

 

# break๋Š” switch๋ฌธ์—์„œ๋„ case๋ฅผ ๋น ์ ธ๋‚˜๊ฐˆ ๋•Œ ์“ฐ์ธ๋‹ค.

# continue์™€ break๋Š” if๋ฌธ์—์„œ๋Š” ์“ธ ์ˆ˜ ์—†๋‹ค.

๋Œ“๊ธ€