๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š” C++ STL [ ๊ฐœ์š” ]

2020. 8. 5. 22:13ใ†PROGRAMMING/C++ STL

 

 

[ STL (Standard Template Library) ]

 

STL(Standard Template Libray)์ด๋ž€ ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ํ…œํ”Œ๋ฆฟ(Template)์€ ๋ฌด์—‡์ผ๊นŒ?

ํ…œํ”Œ๋ฆฟ(Template)์€ C++์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ

์ž๋ฃŒํ˜•์— ์–ฝ๋งค์ด์ง€ ์•Š๊ณ  ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฒ”์šฉ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด ์ค€๋‹ค.

 

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์˜ ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ?

์•ž์—์„œ ๋งํ–ˆ๋“ฏ์ด ์ž๋ฃŒํ˜•์— ์ƒ๊ด€์—†์ด ์ œ๋„ค๋ฆญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹จ์ ์€?

์ž๋ฃŒํ˜•์— ์ƒ๊ด€์—†์ด ์‚ฌ์šฉ๋˜๊ธฐ ์œ„ํ•ด์„œ ๊ต‰์žฅํžˆ ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ๋“ค์–ด์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ๋“ค๋„ ๋ฌด์ˆ˜ํžˆ ๋งŽ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๊ฑฐ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋‹ค.