[C++] vector์™€ deque

vector๋Š” ๋™์  ๋ฐฐ์—ด์ด๋‹ค.
์ผ๋ฐ˜ ๋ฐฐ์—ด์ด๋‚˜ std::array์ฒ˜๋Ÿผ ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ•„์š”ํ•œ ๋งŒํผ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด๋‹ต๊ฒŒ O(1) ์‹œ๊ฐ„์— ์ฆ‰์‹œ ์™„์ˆ˜๋˜๋Š” ์ธ๋ฑ์‹ฑ์ด ๊ฐ€๋Šฅํ•œ๋ฐ๋‹ค, ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์‹œํ€€์Šค(์—ฐ์†์„ฑ)์ด ๋ณด์žฅ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋”์šฑ ๋น ๋ฅด๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ์—๋Š” ์•ฝ๊ฐ„์˜ ๋‹จ์ ์ด ๋”ฐ๋ฅธ๋‹ค.
push_back ๋“ฑ์œผ๋กœ ๊ธธ์ด๋ฅผ ๋Š˜์ผ ๋•Œ ๋ฒกํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘์„ ํ• ๊นŒ? ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์žฌํ• ๋‹นํ•ด์•ผํ•œ๋‹ค.
(์‹ค์ œ๋กœ๋Š” ๋ฏธ๋ฆฌ ์–ด๋А์ •๋„์˜ ์—ฌ๋ถ„ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด๋‘์–ด์„œ, ์žฌํ• ๋‹น์ด ๋งค๋ฒˆ ์ผ์–ด๋‚˜์ง„ ์•Š๋Š”๋‹ค.)
ํ•„์š”ํ•œ ๊ณต๊ฐ„๋งŒ ํ• ๋‹นํ•ด์„œ ๊ทธ๋Œ€๋กœ ์ด์–ด๋ถ™์ด๋ฉด ์•ˆ๋˜๋ƒ๊ณ ? ๊ทธ๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์‹œํ€€์Šค๋ฅผ ์œ ์ง€ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

๊ทธ๋ž˜์„œ ๋ฒกํ„ฐ๋Š” ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ๋” ํฐ ๊ณต๊ฐ„์„ ์ƒˆ๋กœ ํ• ๋‹นํ•ด์„œ ์ „๋ถ€ ๊ฑฐ๊ธฐ๋กœ ์˜ฎ๊ธด๋‹ค.
์›๋ž˜ ์ด ๋ถ€๋ถ„์—์„œ ์ ์ง€ ์•Š์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์„ฑ๋Šฅ์˜ ๋ณ‘๋ชฉ์„ reserve๋ผ๋Š” ํ•จ์ˆ˜๋กœ ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด์„œ ์žฌํ• ๋‹น์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ C++11๋ถ€ํ„ฐ Move Semantic์ด ๋“ฑ์žฅํ•ด์„œ ์ด ๋™์ž‘์˜ ๋น„์šฉ์ด ํฌ๊ฒŒ ๊ฐ์†Œํ–ˆ๋‹ค๊ณ ย ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐฑ์‹ ์ด ์•ˆ๋˜๋Š” ๊ตฌ์‹ ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ์ดํŠธ์—์„œ push_back์˜ ๋ณต์žก๋„๋ฅผ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜์˜จ๋‹ค.

"์ƒ์ˆ˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ํ•˜์ง€๋งŒ ์žฌํ• ๋‹น์ด ์ผ์–ด๋‚˜๋ฉด ์„ ํ˜•์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค."

๊ทธ๋ฆฌ๊ณ  ์ตœ์‹  ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ์ดํŠธ์—์„œ๋Š”

๊ทธ๋ƒฅ ์ƒ์ˆ˜๋ผ๊ณ  ํ•ด์ค€๋‹ค.


deque๋Š” ๋”๋ธ”-์—”๋””๋“œ-ํ๋‹ค.
์›๋ž˜๋Š” ์•ž๊ณผ ๋’ค์—์„œ๋งŒ ์ ‘๊ทผ์ด ๋˜๋Š” ๊ตฌ์กฐ์—ฌ์•ผ ํ•˜๋Š”๋ฐ, c++์—์„œ๋Š” ์ข€ ๋ณ€ํ™”๋ฅผ ์คฌ๋‹ค.
์ธ๋ฑ์‹ฑ์ด ๋˜๊ฒŒ ํ•œ ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ deque๋Š” ์•ž์—์„œ๋„ ๋น ๋ฅธ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ vector๊ฐ€ ๋˜์—ˆ๋‹ค.
๋ฌผ๋ก  ์ด๊ฒƒ ๋ง๊ณ ๋„ ์ฐจ์ด๋Š” ์žˆ๋‹ค.

๋ฒกํ„ฐ๋Š” ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ์žฌํ• ๋‹น์„ ํ•˜์ง€๋งŒ deque๋Š” ๊ทธ๋ƒฅ ์ƒˆ '์ฒญํฌ'๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ์ฒญํฌ๋“ค์€ ์ „๋ถ€ย ๋™์ผํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ฒญํฌ์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ ํ…Œ์ด๋ธ”์„ ๋‘์–ด์„œ ๋ฐ”๋กœ๋ฐ”๋กœ ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€๋ฐ, ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์—์„œ ํผ์˜จ๊ฑฐ๋‹ค.
https://stackoverflow.com/questions/6292332/what-really-is-a-deque-in-stl


๊ทธ๋ž˜์„œ deque ์ž์ฒด๋Š” ์‹œํ€€์Šค๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์œผ๋‚˜, ๋ณด๋‹ค ๊ท ์ผํ•œ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. C++11๋ถ€ํ„ด ๋‹ฌ๋ผ์ง„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋ง์ด๋‹ค.


์ด๋Œ€๋กœ ๋๋‚˜๊ธด ์‹ฌ์‹ฌํ•˜๋‹ˆ ์„ฑ๋Šฅ ์ธก์ •์ด๋‚˜ ํ•ด๋ณธ๋‹ค.


์ˆœ์„œ๋Œ€๋กœ ๋Œ๋ฉด์„œ ์‚ฝ์ž…ํ•˜๋Š” ์ฝ”๋“œ๋‹ค.

์ปดํŒŒ์ผ ํ™˜๊ฒฝ์€ ๋ฆด๋ฆฌ์ฆˆ ๋ชจ๋“œ์— x86์ด๊ณ , ์ธก์ • ๋‹จ์œ„๋Š” ๋‚˜๋…ธ์ดˆ๋‹ค.


์šฐ๋ฆฌ ๋ชจ๋‘ ๋ฒกํ„ฐ๋ฅผ ์“ฐ์ž.