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์ byte size๋ 12byte์ด๋ค.
Size, Data, Capacity 3๊ฐ์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- Size : vector๊ฐ ์ ์ฅํ๊ณ ์๋ ํ์ฌ ์์์ ๊ฐ์์ด๋ค.
- Data : ๋์ ๋ฐฐ์ด ๋ฐ์ดํฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฃผ์์ด๋ค.
- Capacity : vector๊ฐ ๋ด์ ์ ์๋ ์ต๋ ์์์ ๊ฐ์์ด๋ค.
์๋ฌด ์์๋ ์๋ vector์ Size, Data, Capacity๋ 0๊ณผ NULL ๊ฐ์ผ๋ก ์ด๊ธฐํ๋ผ์๋ค.
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์ 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๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์์ด๋ค.
๋ฐ๋ผ์ ํจ์์ ์์ฑ ์ธ์๋ก ํ์ํ ์ธ์๋ง ๊ฑด๋ค์ค๋ค.
์์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์์ ์์ฑ์๊ฐ ํ ๋ฒ๋ง ํธ์ถ๋๋ค.
'PROGRAMMING > C++ STL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ค์ ์ ๋ฆฌํ๋ C++ STL ์๋ฃ๊ตฌ์กฐ map/set (2) | 2020.08.10 |
---|---|
๋ค์ ์ ๋ฆฌํ๋ C++ STL ์๋ฃ๊ตฌ์กฐ list (0) | 2020.08.09 |
๋ค์ ์ ๋ฆฌํ๋ C++ STL ์๋ฃ๊ตฌ์กฐ array (0) | 2020.08.06 |
๋ค์ ์ ๋ฆฌํ๋ C++ STL [ ๊ฐ์ ] (0) | 2020.08.05 |
04. [C++] STL (Standard Template Library) - ์๊ณ ๋ฆฌ์ฆ(algorithm) (0) | 2019.06.26 |