[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์ด๊ณ , ์ธก์ ๋จ์๋ ๋๋ ธ์ด๋ค.
์ฐ๋ฆฌ ๋ชจ๋ ๋ฒกํฐ๋ฅผ ์ฐ์.