๋ค์ ์ ๋ฆฌํ๋ C++ STL [ ๊ฐ์ ]
[ STL (Standard Template Library) ]
STL(Standard Template Libray)์ด๋ ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ํ ํ๋ฆฟ(Template)์ ๋ฌด์์ผ๊น?
ํ ํ๋ฆฟ(Template)์ C++์์ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ ๊ธฐ๋ฅ์ผ๋ก
์๋ฃํ์ ์ฝ๋งค์ด์ง ์๊ณ ๋์ํ ์ ์๋๋ก ๋ฒ์ฉ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํด ์ค๋ค.
์๋ฅผ ๋ค์ด์ Add๋ผ๋ ๋ง์ ํจ์๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์.
ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ฉด ์๋ฃํ์ ์๊ด์์ด ํจ์๋ฅผ ์์ฑํ์ฌ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์์ ํ ํ๋ฆฟ ํจ์ Add๋ ์ด๋ค ์๋ฃํ์ด๋๋ผ๋ ํจ์์ ์ ๋ฌ๋๋ ๋ ๊ฐ์ ์ธ์๊ฐ
๊ฐ์ ์๋ฃํ์ด๊ธฐ๋ง ํ๋ฉด ๋ ์๋ฃํ์ ๋ํ ์ ์๋ Addํจ์๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
์ด๋ ๊ฒ ๋ฒ์ฉ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ค๋ฆญ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ ํ๋ค.
์ฆ, ์๋ฃํ๊ณผ ๋ฌด๊ดํ ํ๋ก๊ทธ๋๋ฐ์ ๋งํ๋ ๊ฒ์ด๋ค.
ํ ํ๋ฆฟ์ ๋ ๊ฐ์ง๊ฐ ์๋ค.
- ํจ์๋ฅผ ๋ง๋ค์ด ๋ด๋ ํจ์ ํ ํ๋ฆฟ
- ์๋ฃํ์ ๋ง๋ค์ด ๋ด๋ ํด๋์ค ํ ํ๋ฆฟ
๊ทธ๋ ๋ค๋ฉด ์ด์ STL(Standard Template Libray), ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋?
- ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํ๋ C++ ์ธ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- STL์์ ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ๋ ๋ชจ๋ ํด๋์ค ํ ํ๋ฆฟ์ผ๋ก ์์ฑ๋์ด ์๋ค.
- STL์์ ์ ๊ณตํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ ํจ์ ํ ํ๋ฆฟ์ผ๋ก ์์ฑ๋์ด ์๋ค.
STL์ ๋์ผํ(homogeneous) ์๋ฃํ์ ๊ฐ์ฒด๊ฐ ๋ง์ด ์๋ ์๋ฃ๊ตฌ์กฐ์์
๋ชฉ์ ์ ๋ง๋ ์๋ฃ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ ํจ์๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋งค๋ฒ ๋ง๋ค์ง ์์๋ ๋๋๋ก ํ๋ ๊ฒ์ด STL์ ์ฃผ ์ญํ ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด STL์ ์ด๋ป๊ฒ ์๋ฃํ์ ์๊ด์์ด ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๊ฒฐํด์ค๊น?
๋ฐ๋ก ์ปจํ ์ด๋์ ์๊ณ ๋ฆฌ์ฆ์ด ์ง์ ๊ด๋ จ๋์ง ์๋๋ก ์ด ๋์ ์๋ก ์ฐ๊ฒฐํด์ฃผ๋
๋ฐ๋ณต์(iterator)๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ ๋ช ํ ๋์์ธ ํจํด ์ค ํ๋์ด๋ค.
- ์ปจํ ์ด๋๊ฐ ์์ ์ ์์๋ฅผ ์ํํ ์ ์๋๋ก ์ธ๋ถ์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค.
- C++ ํ๋ก๊ทธ๋จ์ด ์๋ก ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์๋๋ก
ํฌ์ธํฐ๋ฅผ ์ผ๋ฐํ ํ ๊ฒ์ด๋ค.
- ๋ฐ๋ณต์๋ ํฌ์ธํฐ๋ฅผ ์ถ์ํํ ๊ฒ์ด์ง ํฌ์ธํฐ๋ ์๋๋ค.
- ๋ฐ๋ณต์๋ฅผ ์ธ์๋ก ๋ฐ๋ ๋ชจ๋ ํจ์ ํ ํ๋ฆฟ์ ํฌ์ธํฐ๋ฅผ ์ธ์๋ก ๋ฐ์ ๋์ํ๋ค.
- ๋ฐ๋ณต์๋ ๋ชจ๋ 6์ข ๋ฅ๊ฐ ์๋ค.
Input -> Forward -> Bidirectional -> RandomAccess -> Contiguous -> Output
ํ์ดํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์๋ก ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- C++์์ contiguous ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ปจํ ์ด๋๋ array, vector, string์ด๋ค.
๋ฐ๋ณต์๊ฐ ์๊ธฐ ๋๋ฌธ์ STL์ ๋งค์ฐ ์ ์ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์๊ณ
์์ผ๋ก ์๋ก์ด ์ปจํ ์ด๋์ ์๊ณ ๋ฆฌ์ฆ์ด ์ถ๊ฐ๋๋๋ผ๋ ์ด์ ์ฝ๋๋ค์ด ๋ฌธ์ ์์ด ์คํ๋ ์ ์๋ค.
์ฆ, ์ปจํ ์ด๋์ ์๊ณ ๋ฆฌ์ฆ ๊ทธ๋ฆฌ๊ณ ์ด ๋์ ์ฐ๊ฒฐํ๋ ๋ฐ๋ณต์๊ฐ STL์ ์ธ ๊ฐ์ง ํต์ฌ์์์ด๋ค.
STL์ด ์ ๊ณตํ๋ ์ปจํ ์ด๋๋ ์ด๋ค ๊ฒ๋ค์ด ์์๊น?
[ ์ฐ์ ์ปจํ ์ด๋(Sequential Container) ]
array, vector : ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ(contiguous memeory)
deque
list, forward_list
[ ์ฐ๊ด ์ปจํ ์ด๋(Associative Contatiner) ]
set, multiset
map, multimap
[ ์์ ์๋ ์ฐ๊ด ์ปจํ ์ด๋(Unordered Associative Contatiner) ]
unordered_set, unordered_multiset
unordered_map, unordered_multimap
STL์ ์ฅ์ ์ ๋ฌด์์ผ๊น?
์์์ ๋งํ๋ฏ์ด ์๋ฃํ์ ์๊ด์์ด ์ ๋ค๋ฆญ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๋จ์ ์?
์๋ฃํ์ ์๊ด์์ด ์ฌ์ฉ๋๊ธฐ ์ํด์ ๊ต์ฅํ ๋ง์ ๊ธฐ๋ฅ๋ค์ด ๋ค์ด์๋ค.
๋ฐ๋ผ์ ์ฌ์ฉํ์ง ์๋ ๊ธฐ๋ฅ๋ค๋ ๋ฌด์ํ ๋ง์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌด๊ฑฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ค.