C++

[C++ STL] STL์ด๋ž€?

HEY__ 2021. 7. 22. 14:09
728x90

๐Ÿ’ก 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

728x90
๋Œ“๊ธ€์ˆ˜0