๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š” C++ STL ์ž๋ฃŒ๊ตฌ์กฐ vector

2020. 8. 7. 00:10ใ†PROGRAMMING/C++ STL

 

 

[ STL ์ž๋ฃŒ๊ตฌ์กฐ vector]

 

STL vector๋Š” array์™€ ๋‹ฌ๋ฆฌ ๋™์  ๋ฐฐ์—ด์ด๋‹ค. 

๋™์ ์ด๋ž€ ๋ฌด์Šจ ๋œป์ผ๊นŒ?

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ๋ฌด์—‡์ธ๊ฐ€๊ฐ€ ๋ณ€ํ™”ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๋ฐฐ์—ด์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ฐœ์ˆ˜์ด๋‹ค.

vector๋Š” ์‹คํ–‰ ์‹œ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

vector๋Š” ๋ฐ˜๋“œ์‹œ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

vector์— ์›์†Œ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด, ๋ฉ”๋ชจ๋ฆฌ๋Š” new๋กœ ์š”์ฒญํ•ด์„œ ์ƒˆ๋กœ ํ™•๋ณดํ•œ๋‹ค.

1. ํ˜„์žฌ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜(capacity) ๋ณด๋‹ค ๋” ํฐ ์ƒˆ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•œ๋‹ค.

2. ์ƒˆ ๋ฉ”๋ชจ๋ฆฌ์— ํ˜„์žฌ ์›์†Œ๋ฅผ ๋ชจ๋‘ ๋ณต์‚ฌํ•œ๋‹ค.

3. ๋ณต์‚ฌํ•œ ์›์†Œ๋“ค์˜ ๋‹ค์Œ ์œ„์น˜์— ์ƒˆ ์›์†Œ๋ฅผ ์ถ”๊ฐ€(push_back)ํ•œ๋‹ค.

4. ์ด์ „ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜(delete)ํ•œ๋‹ค.

์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ํ• ๋‹น๋ฐ›๊ณ  ๊ฑฐ๊ธฐ๋กœ ์˜ฎ๊ฒจ ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์–ผ๋งˆ๋‚˜ ๋น„์šฉ์ด ํฐ ๋™์ž‘์ธ์ง€ ์•Œ๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

new, delete ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ƒ์ด๋‹ค.

 

 

 

[ STL vector์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜ ]

 

STL vector

STL vector์˜ byte size๋Š” 12byte์ด๋‹ค.

Size, Data, Capacity 3๊ฐœ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

- Size : vector๊ฐ€ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ํ˜„์žฌ ์›์†Œ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

- Data : ๋™์  ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์ž‘ ์ฃผ์†Œ์ด๋‹ค.

- Capacity : vector๊ฐ€ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์›์†Œ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

์•„๋ฌด ์›์†Œ๋„ ์—†๋Š” vector์˜ Size, Data, Capacity๋Š” 0๊ณผ NULL ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋ผ์žˆ๋‹ค.

 

STL vector

vector์— ์›์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด Size, Data, Capacity๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

 

 

 

 

[ STL vector ๋ฉ”๋ชจ๋ฆฌ ์ •์ฑ… ]

 

vector์˜ Capacity ๊ฐ’์€ ์ฒ˜์Œ์— ์ดˆ๊ธฐํ™”ํ•œ Size์™€ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ์„ค์ •๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์ดˆ๊ธฐํ™” ์ดํ›„ vector์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ Size๊ฐ€ Capacity ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด

vector์˜ Capacity๋Š” ์•ฝ 30 ~ 50% ๋น„์œจ๋กœ ํฌ๊ธฐ๊ฐ€ ์ปค์ง„๋‹ค.

์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ์˜ ์žฌํ• ๋‹น๊ณผ ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. ์ด ๋™์ž‘์ด STL vector์˜ ํ•ต์‹ฌ ๋™์ž‘์ด๋‹ค.

๊ฐ€๋Šฅํ•œ ํ•œ vector๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌํ• ๋‹น ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด vector ์‚ฌ์šฉ์˜ ํ•ต์‹ฌ์ด๋‹ค.

 

 

vector๋Š” ์ƒ์„ฑ ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉค๋ฒ„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ƒ์„ฑ์ž์˜ ์ธ์ˆ˜๋กœ ํ™•๋ณดํ•  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

์ด๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ˆ์•ฝํ•ด ๋‹ฌ๋ผ๊ณ  ๋ถ€ํƒํ•˜๋Š” ํ•จ์ˆ˜ reserve()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

reserve()์˜ ์‚ฌ์šฉ์„ ํ†ตํ•ด vector์˜ ๋นˆ๋ฒˆํ•œ ๋ฉ”๋ชจ๋ฆฌ ์žฌํ• ๋‹น์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ vector๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ•ญ์ƒ reserve๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์˜ˆ์•ฝํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ž.

 

 

 

[ STL vector ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ]

 

ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” DATA, STACK, HEAP, CODE ์˜์—ญ์ด ์žˆ๋‹ค.

DATA : ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ

STACK : ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ

HEAP : ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ.

STL vector์—๋Š” ๋™์  ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค.

์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋Š” ๋™์  ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹˜์„ ์œ ์˜ํ•˜์ž.

 

vector์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ vector์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌํ• ๋‹นํ•˜๋Š” ๊ณผ์ •์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

[ vector์˜ push_back()๊ณผ emplace_back() ]

 

vector์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ push_back()๊ณผ emplace_back() ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋‘ ๊ฐœ์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

vector์˜ push_back๊ณผ emplace_back

push_back()์€ ์ž„์‹œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ†ตํ•ด์„œ vector์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ๊ฐ์ฒด์— ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•œ ์ž„์‹œ ๊ฐ์ฒด CTestClass๋ฅผ ๋งŒ๋“ ๋‹ค.

2. ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌ ์ƒ์„ฑํ•˜์—ฌ push_back ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋˜๋‹ค์‹œ ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.

3. push_back ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋งŒ๋“ค์–ด์ง„ ์ž„์‹œ๊ฐ์ฒด๋ฅผ vector์— ์ถ”๊ฐ€ํ•œ๋‹ค.

4. ์ƒ์„ฑ์ธ์ž๋กœ ๋“ค์–ด์˜จ CTestClass ์ž„์‹œ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค. 

 

emplace_back()์€ ํ™•๋ณดํ•œ ๋ฉ”๋ชจ๋ฆฌ์— vector๊ฐ€ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๋”ฐ๋ผ์„œ ํ•จ์ˆ˜์˜ ์ƒ์„ฑ ์ธ์ž๋กœ ํ•„์š”ํ•œ ์ธ์ž๋งŒ ๊ฑด๋„ค์ค€๋‹ค.

์ž„์‹œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ์ž๊ฐ€ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.