๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ STL; Standard Template Library

by ๐“ƒ๐’ถ๐“ƒ๐’ถ๏ฝก 2015. 3. 18.

STL(Standard Template Library, ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชจ์Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

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

์ปจํ…Œ์ด๋„ˆ๋Š” int๋‚˜ float ๋“ฑ์˜ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ด๋‚˜ struct, class๊ฐ™์€ ์œ ์ € ์ •์˜ ์ž๋ฃŒํ˜•์„ ๋‹ด๋Š”๋‹ค.

์ข…๋ฅ˜๋กœ๋Š” list, vector, deque, map, set ๋“ฑ์ด ์žˆ๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋จผ์ € ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•˜๋Š”๊ฐ€๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

ํด๋ž˜์Šค๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

์ด ๋•Œ ํ…œํ”Œ๋ฆฟ์„ ์ด์šฉํ•˜๋ฉด ์ด์นญํ™”๋œ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ,

ํƒ€์ž…์— ์ œ์•ฝ์„ ๋ฐ›์ง€ ์•Š๋Š” ๋กœ์ง์„ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Generic Programming์„ ์œ„ํ•ด์„œ๋Š” ๊ผญ ํ•„์š”ํ•˜๋‹ค.

 

 

1. ํ…œํ”Œ๋ฆฟ(Template)

 

1) ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ

int, float, double ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•ด ๊ฐ™์€ ํ•จ์ˆ˜๋ช…์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ

(๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š์Œ)

 

 

template <typename type> function - declarator์˜ ํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ

์œ„์˜ ํ•จ์ˆ˜๋ฅผ ์ข€ ๋” ๊ฐœ์„ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

Max ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜์—์„œ๋Š” ๋น„๊ต๋Œ€์ƒ์˜ ๊ฐ’์ด ๋ฐ”๋€Œ์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— const๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ณ ,

์ฒ˜๋ฆฌํ•˜๋Š” ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐ(referencing)ํ•˜์—ฌ ๊ฐ€์ ธ์˜จ๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ผญ typename๋งŒ์ด ์•„๋‹Œ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

 

 

2) ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ

 

โ€ป ์Šคํƒ: ์ž๋ฃŒ ๊ตฌ์กฐ ์ค‘์˜ ํ•˜๋‚˜๋กœ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ๊ฒƒ์„ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋‚ด๋Š” LIFO(Last In First Out) ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ๋•Œ๋Š” push, ๋นผ๋‚ผ ๋•Œ๋Š” pop์ด๋ผ๋Š” ์ด๋ฆ„์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

 

http://linuxspot.tistory.com/47

 

 

vector::vector

vector::assign - ์ €์žฅ๋œ ๊ฐ’๋“ค์— ์ƒˆ๋กœ์šด ๊ฐ’ ๋Œ€์ž…

vector::at - n๋ฒˆ์งธ์˜ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ž…ํ•  ๋•Œ ์‚ฌ์šฉ

vector::back - ๋งˆ์ง€๋ง‰ ์š”์†Œ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ž…

vector::begin - ์ฒซ๋ฒˆ์งธ ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž(iterator) ๋ฐ˜ํ™˜

vector::capacity

vector::clear - ๊ฐ’ ์‚ญ์ œ. ์ตœ์ข…์ ์œผ๋กœ size๋Š” 0์ด ๋œ๋‹ค.

vector::empty - ๋ฒกํ„ฐ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ. if(size() == 0)๋ณด๋‹ค ์†๋„๋ฉด์—์„œ ์ด๋“.

vector::end - ๋งˆ์ง€๋ง‰ ์š”์†Œ์˜ ๋‹ค์Œ ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž ๋ฐ˜ํ™˜

vector::erase - ํ•˜๋‚˜ ๋˜๋Š” ํŠน์ • ๋ฒ”์œ„์˜ ๊ฐ’ ์‚ญ์ œ. ์‚ญ์ œ๋œ ์š”์†Œ์˜ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž ๋ฐ˜ํ™˜.

vector::front - ์ฒซ๋ฒˆ์งธ ์š”์†Œ์˜ ๋ ˆํผ๋Ÿฐ์Šค ๋ฐ˜ํ™˜

vector::get_allocator

vector::insert - ์ƒˆ๋กœ์šด ์š”์†Œ ์‚ฝ์ž…. ์ง€์ •ํ•œ ์œ„์น˜์˜ ์•ž์ชฝ์— ์‚ฝ์ž…๋œ๋‹ค.

vector::max_size

vector::operator=

vector::operator[] - ์ฒจ์ž์— ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ์˜ ๋ ˆํผ๋Ÿฐ์Šค ๋ฐ˜ํ™˜. ์ฒจ์ž๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘.

vector::pop_back - ๋ฒกํ„ฐ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ์‚ญ์ œ

vector::push_back - ๋ฒกํ„ฐ์˜ ๋งˆ์ง€๋ง‰์— ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€

vector::rbegin - ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” reverse ๋ฐ˜๋ณต์ž ๋ฐ˜ํ™˜

vector::rend - ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” reverse ๋ฐ˜๋ณต์ž ๋ฐ˜ํ™˜

vector::reserve - automatic reallocations์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด reserve๋กœ ์ €์žฅ ๊ณต๊ฐ„์„ ๋ฏธ๋ฆฌ ํ™•๋ณดํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ

vector::resize - ๋ฒกํ„ฐ์˜ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ

vector::size - ๋ฒกํ„ฐ์— ์ €์žฅ๋œ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

vector::swap - ๋‘ ๋ฒกํ„ฐ์˜ ์š”์†Œ๋ฅผ ๊ตํ™˜. ๊ฐ™์€ ๋ฐ์ดํ„ฐํƒ€์ž…์ผ๋•Œ๋งŒ ์„ฑ๋ฆฝ

 

 

 

โ€ป STL string class: http://pages.cs.wisc.edu/~cs368-2/CppTutorial/NOTES/STRING.html