[C++ STL] STL์ด๋?
๐ก STL์ด๋?
STL์ ํ์ค C++๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ๋ถ์ผ๋ก Standard Template Library์ ์ฝ์๋ก์จ, ํ๋ก๊ทธ๋จ์ ํ์ํ ์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ์ ํ ํ๋ฆฟ์ผ๋ก ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
๐ก ์ปจํ ์ด๋
์ปจํ ์ด๋๋ ๊ฐ์ ํ์ ์ ์ ์ฅ, ๊ด๋ฆฌํ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง ํด๋์ค์ด๋ฉฐ, ์ด 7๊ฐ์ง ์ปจํ ์ด๋ (vector, deque, list, set, multiset, map, multimap)๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋จผ์ ์ปจํ ์ด๋๋ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค.
1. ํ์ค ์ํ์ค ์ปจํ ์ด๋(standard sequence container)
์ปจํ ์ด๋ ์์๊ฐ ์์ ๋ง์ ์ฝ์ ์์น(or ์์)๋ฅผ ๊ฐ์ง๋ ์ปจํ ์ด๋๋ฅผ ๋งํฉ๋๋ค.
์์๋ฅผ ํด๋น ์ปจํ ์ด๋์ ์ฝ์ ํ๋ฉด, ์ฝ์ ๋๋ ์์์ ๋ฐ๋ผ ์์์ ์์น๊ฐ ๊ฒฐ์ ๋๊ณ ๋ฐ๋์ง ์์ต๋๋ค.
ex) vector, deque, list
2. ํ์ค ์ฐ๊ด ์ปจํ ์ด๋(standard associative container)
์ ์ฅ ์์๊ฐ ์ฝ์ ์์์ ๊ด๋ จ ์์ด ํน์ ํ ์ ๋ ฌ ๊ธฐ์ค์ ์ํด ์ ๋ ฌ๋๋ ์ปจํ ์ด๋๋ฅผ ๋งํฉ๋๋ค.
์ฆ, ์์๊ฐ ์ธ์ ์ฝ์ ๋์๋์๋ ์๊ด ์์ด ์ ๋ ฌ ๊ธฐ์ค(๋ํดํธ: less)์ ๋ฐ๋ผ ์์์ ์์น๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
ex) set, multiset, map, multimap
๋ํ, ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๋จ์๋ก ์ ์ฅํ๋์ง์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค์ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค.
1. ๋ฐฐ์ด ๊ธฐ๋ฐ ์ปจํ ์ด๋(array-based container)
ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๋จ์(array)์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
ex) vector, deque
2. ๋ ธ๋ ๊ธฐ๋ฐ ์ปจํ ์ด๋(node-based container)
ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๋จ์(node)์ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
ex) list, set, multiset, map, multimap
๐ก ๋ฐ๋ณต์
๋ฐ๋ณต์๋ ์ปจํ ์ด๋์ ์ ์ฅ๋ ์์๋ฅผ ์ํ & ์ ๊ทผ์ ํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ฉฐ, ํฌ์ธํฐ์ ๋น์ทํ๊ฒ ๋์ํฉ๋๋ค.
์๊ณ ๋ฆฌ์ฆ๊ณผ ์ปจํ ์ด๋์ ์ข ๋ฅ์ ์๊ด์์ด ์์์ ์ ๊ทผํ ์ ์๋ ํฐ ์ฅ์ ์ด ์์ผ๋ฉฐ, ์ด๋ฌํ ํน์ง์ ํตํด ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ปจํ ์ด๋๋ฅผ ์ด์ด์ฃผ๋ ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ฐ๋ณต์์ ํน์ง
1. * ์ฐ์ฐ์๋ฅผ ํตํด ์ปจํ ์ด๋ ๋ด๋ถ์ ์์(๊ฐ์ฒด)๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์ ๊ทผํ ์ ์์ต๋๋ค.
2. ++ ์ฐ์ฐ์, !=์ == ์ฐ์ฐ์๋ฅผ ํตํด ๋ค์ ์์๋ก ์ด๋ํ๊ณ ๋ชจ๋ ์์๋ฅผ ์ํํ ์ ์์ต๋๋ค.
๋ฉค๋ฒ ํจ์ begin()๋ ์์ฐจ์ด์ ์์์ ๊ฐ๋ฆฌํค๋ ๋ฐ๋ณต์ ๋ฐํํ๋ฉฐ, end()๋ ์์ฐจ์ด์ ๋์ ๊ฐ๋ฆฌํค๋ ๋ฐ๋ณต์๋ฅผ ๋ฐํํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ end()๊ฐ ์ ์ผ ๋ง์ง๋ง ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ด ์๋๋ผ๋ ๊ฒ!!!!!์ ๋๋ค.
end()๋ ๋ง์ง๋ง ์์๋ฅผ ํ๋ ์ง๋ ์์น๋ฅผ ๋ฐํํฉ๋๋ค.
begin๊ณผ end๋ฅผ ๊ตฌ๊ฐ(range)๋ผ๊ณ ํ๋๋ฐ, ๋ฐ๊ฐ ๊ตฌ๊ฐ(half-open range)๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ [begin, end)์ฒ๋ผ ํ๊ธฐํฉ๋๋ค.
์ฆ, ์์ฐจ์ด์ ์ค์ ์์๋ begin๋ถํฐ end ์ด์ ๊น์ง ์๋ ๊ฒ์ ๋๋ค.
๋ง์ฝ ์์ฐจ์ด [p, q)์์ p์ q๊ฐ ๊ฐ๋ค๋ฉด ํด๋น ์์ฐจ์ด์๋ ์์๊ฐ ์๋ค๊ณ ํ๋จ ํ ์ ์์ต๋๋ค.
* ์ฐ์ฐ์ (ex: *iter)๋ฅผ ํตํด์ ์ ๊ทผํ ์ ์๊ณ , ++๋ฅผ ํตํด ๋ค์ ์์๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ, ==์ != ์ฐ์ฐ์๋ก ์์ฐจ์ด์ ๋์ธ์ง ํ์ธ ํ ์ ์์ต๋๋ค.
๋ฐ๋ณต์๋ ํ์ฉ๋๊ฐ ๋๊ณ ๋ด์ฉ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ดํ์ ๋ฐ๋ณต์๋ง์ ๋ค๋ค๋ณผ ์์ ์ ๋๋ค.
๐ก ์๊ณ ๋ฆฌ์ฆ
STL์ ์์ฐจ์ด์ ์์๋ฅผ ์กฐ์ฌ, ๋ณ๊ฒฝ, ๊ด๋ฆฌ, ์ฒ๋ฆฌํ ๋ชฉ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
STL ์๊ณ ๋ฆฌ์ฆ์ 7๊ฐ์ง์ ๋ฒ์ฃผ๋ก ๋ถ๋ฅํฉ๋๋ค.
1. non-modifying algorithms (์์๋ฅผ ์์ ํ์ง ์๋ ์๊ณ ๋ฆฌ์ฆ)
2. modifying algorithms (์์๋ฅผ ์์ ํ๋ ์๊ณ ๋ฆฌ์ฆ)
3. removing algorithms (์ ๊ฑฐ ์๊ณ ๋ฆฌ์ฆ)
4. mutating algorithms (๋ณ๊ฒฝ ์๊ณ ๋ฆฌ์ฆ)
5. sorting algorithms (์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ)
6. sorted range algorithms (์ ๋ ฌ๋ ๋ฒ์ ์๊ณ ๋ฆฌ์ฆ)
7. numeric algorithms (์์น ์๊ณ ๋ฆฌ์ฆ)
STL ์๊ณ ๋ฆฌ์ฆ ๋ํ ๋ฐ๋ณต์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปจํ ์ด๋๋ ์์ ํ์ ์ ์๊ด ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ์ฑ : ๋๋ฅผ ์๊ทนํ๋ C++ STL