Iterator
๋ฐ๋ณต์๋ 33. Generic ํจ์์ด๋ค.
์ฆ, ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ์ํด ๋ง๋ค์ด์ง ์ ์ญํจ์์ด๋ค. ์ฐ๋ฆฌ๋ ๋ฐฐ์ด์ ๋ค๋ฃจ๊ธฐ ์ํด vector, array, list์ ๊ฐ์ ๊ฒ๋ค์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฐ๋ฐ, ์ด๋ ์๋ค์ ๋ค๋ฃจ๊ธฐ ์ํด์๋ ์ด ์ธ๊ฐ์ง ๊ฐ์ฒด์ ์ด๋ค method๊ฐ ์๋์ง ์์์ผ ํ๋ค.
๋ํ,ย ์ด๋ค ์ธํ์ด ๋ค์ด์ค๋ ๊ฐ์, ํด๋์ค๋ ํจ์๋ฅผ ๋์๊ฐ๊ธฐ ์ํด์๋ ํน์ ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ ์ผ๋ฐ์ ์ธ ํจ์๊ฐ ์กด์ฌํ๋ ๊ฒ์ด ๋ณด๋ค ํธ๋ฆฌํ๋ค.
๊ทธ๋์ Iterator ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ช๊ฐ์ ํจ์๋ฅผ ๊ตฌํํด๋์๋ค.
Method
Iterator ๊ฐ์ฒด์์ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด 7๊ฐ์ด๋ค.
*iter
iter++
iter--
iter1 == iter2
iter1 != iter2
begin(๊ฐ์ฒด)
end(๊ฐ์ฒด)
์ด๊ฒ๋ค์ ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ย ์ฐ์ฐ์๊ฐ ์๋๋ค!
ํด๋์ค ๋ด๋ถ์์ ํจ์ ์ค๋ฒ๋ก๋ฉ์ ํตํด ๊ตฌํํด ๋์ ๋ ์๋ค์ด๋ค. ๊ทธ๋ฌ๋ iter1 + iter2 ์ ๊ฐ์ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
begin
ย ,ย end
ย ๋ ๊ฐ์ฒด๋ฅผ ์ง์ด๋ฃ๊ฒ๋ ๊ฒฝ์ฐ, ์ฒ์ ์ฃผ์์ ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๋ iterator ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ ํจ์์ด๋ค. ํฌ์ธํฐ์ ๋น์ทํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
Example
iterator๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋,
iterator๋ฅผ ์ฌ์ฉํ ๋
์ฌ๊ธฐ์ auto๋ฅผ ์ ์ธํด์ค๊ฒ ์ค์ํ๋ฐ, begin ํจ์์ ์ธํ์ ๋ฐ๋ผ ๋ฐํํ๋ iterator์ ๊ฐ์ฒด ์๋ฃํ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ด ์๋ฃํ์ ์ธ์งํ ์ ์๋ auto๋ฅผ ์ ์ธํด์ค๋ค.
์๋ง iterator ํด๋์ค๋ template ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค์ด์ ธ ์์ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ iter ์ธ์คํด์ค๊ฐ end(v) ์ด๊ธฐ ์ ๊น์ง ์ฆ๊ฐ์ํค๋ฉฐ,
ํด๋น ์ฃผ์์ ์์๋ฅผ ์ถ๋ ฅํ๊ฒ ํ ์ ์๋ค.
Example2
๊ฑฐ๊พธ๋ก ์ถ๋ ฅํ ๋, iter_end๋ฅผ ํ๋ ์ค์ฌ์ค ์ด์ ๋, end()
ย ํจ์๊ฐ ํด๋น๊ฐ์ฒด์ ๋ค์ ์ฃผ์๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ด ๊ฐ๋ถํฐ ์ถ๋ ฅ์ ์๋ํ๊ฒ ๋๋ฉด, ์ฐ๋ ๊ธฐ๊ฐ์ด ์ถ๋ ฅ๋๊ณ ๊ฐ์ฒด์ ์ฒ์ ์์๋ ์ถ๋ ฅ๋์ง ์๋๋ค.
for๋ฌธ์ ์ฌ์ฉํด์ reverse๋ก ์ถ๋ ฅํ๊ธฐ ์ํ ์์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ ๋ ํผ๋ฐ์ค๋ก ์ธ์๋ฅผ ๊ฐ์ง๊ณ ์ฌ ์ ์๊ฒ ๋๋ค. ํจ์ ์์์ iterator ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ์ค์ธ ํ์ for๋ฌธ์ ๋๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ deep copy๋ฅผ ํ ์ดํ ์ด ํจ์๋ฅผ ๋๋ฆด ์ ์๊ฒ ๋๋ ํ๊ณ๋ฅผ ๊ฐ์ง๋ค.