[C++] std::vector ์˜ resize vs reserve

์œ ์ง€์—ฐยท2023๋…„ 6์›” 29์ผ
0

C++

๋ชฉ๋ก ๋ณด๊ธฐ
4/7

๐Ÿ‘‹ vecotr ๋ฉ”์†Œ๋“œ์ธ resize์™€ reserve์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!


โœ๏ธ ๋ฒกํ„ฐ์˜ resize( ) vs reserve( )

โœ”๏ธ ๋ฒกํ„ฐ์˜ size vs capacity

๋ฒกํ„ฐ๋Š” ์ผ์ • ํฌ๊ธฐ์˜ ๋ฐฐ์—ฌ์„ ํ• ๋‹นํ•œ ๋’ค, push_back์„ ํ†ตํ•˜์—ฌ ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋˜ ์ค‘ ๋ฒกํ„ฐ์˜ size๊ฐ€ capacity์™€ ๊ฐ™์•„ ์กŒ์„ ๋•Œ, ๋‹ค์Œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ €์žฅํ•  ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ํฌ๊ธฐ๊ฐ€ ๊ธฐ์กด ๋ฒกํ„ฐ์˜ 2๋ฐฐ์ธ ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ํ• ๋‹นํ•˜๊ณ , ๊ธฐ์กด์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๊ณ , ๊ธฐ์กด ๋ฒกํ„ฐ๋ฅผ ํ•ด์ œํ•˜๋Š” ํ• ๋‹น โ†’ ๋ณต์‚ฌ โ†’ ํ•ด์ œ ์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

์ด ๊ณผ์ •์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์œผ๋กœ ๊ฐ„ํ˜น PS ์ค‘ ์ด๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด resize๋‚˜ reserve๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฏธ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด ๋†“์„ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” ์šฉ๋„๊ฐ€ ๋งค์šฐ ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ, ๋ถ„๋ช…ํ•œ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๊ทธ ์ „์— size์™€ capacity์˜ ์ •์˜๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž.

์—ฌ๊ธฐ์„œ ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด ๋†“์€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ capacity, ๋ฐฐ์—ด์— ์ €์žฅ๋œ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ size ๋ผ๊ณ  ํ•œ๋‹ค. ๋˜ํ•œ ๋ฒกํ„ฐ์˜ size( ), capacity( ) ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ• ๋‹นํ•ด ๋†“์€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ : capacity
  • ๋ฐฐ์—ด์— ์ €์žฅ๋œ ์›์†Œ์˜ ๊ฐœ์ˆ˜ : size

โœ”๏ธ ๋ฒกํ„ฐ์˜ resize( )

constexpr void resize(size_type count);
constexpr void resize(size_type count, const value_type& value);

๋ฒกํ„ฐ์˜ resize( ) ๋ฉ”์†Œ๋“œ๋Š” ๋ฒกํ„ฐ ์›์†Œ์˜ size๋ฅผ count๋กœ ๊ฐ™๋„๋ก ์กฐ์ •ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • count < size : ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ size๋งŒํผ ์ค„์ž„ (๋ฒกํ„ฐ์˜ ๋’ค์—์„œ ๋ถ€ํ„ฐ ๊ฐ’ ์‚ญ์ œ)
  • count > size
    • value ์ธ์ž๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ: ๋ฒกํ„ฐ์˜ size๋ฅผ count๋งŒํผ ๋Š˜๋ฆฌ๊ณ , ๊ทธ ์›์†Œ๊ฐ’์„ value๋กœ ์„ค์ •
    • value ์ธ์ž๊ฐ€ ๋”ฐ๋กœ ์—†๋Š” ๊ฒฝ์šฐ: value_type์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ size๋ฅผ count ๋งŒํผ ๋Š˜๋ฆผ

โœ”๏ธ ๋ฒกํ„ฐ์˜ reserve( )

constexpr void reserve(size_type new_cap);

๋ฒกํ„ฐ์˜ reserve( ) ๋ฉ”์†Œ๋“œ๋Š” ๋ฒกํ„ฐ์˜ capacity๋ฅผ new_cap๋งŒํผ ํ• ๋‹นํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
new_cap์ด ํ˜„์žฌ ๋ฒกํ„ฐ์˜ capacity๋ณด๋‹ค ํด ๋•Œ๋งŒ ๋™์ž‘ํ•˜๋ฉฐ, ์–ด๋– ํ•œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰ ์ •๋ฆฌํ•ด๋ณด๋ฉด resize( )๋Š” ๋ฒกํ„ฐ์˜ size๋ฅผ ์กฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น + ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ, reserve( ) ๋Š” ๋ฒกํ„ฐ์˜ capacity๋ฅผ ์กฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹นํ•˜๋˜ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค!


๋ฒกํ„ฐ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ resize( ) ์™€ reserve( )์˜ ์ฐจ์ด์ ์„ ๋ชจ๋ฅด๊ณ  ์•„๋ฌด๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„ ๋‹ค์‹œ ๊ฐ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์šฉ๋„๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ํฌ์ŠคํŒ… ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์–ผ๋งˆ ์ „์— reserve๋ฅผ reverse๋กœ ๋ณด๊ณ  ํ•œ์ฐธ์„ ๊ณ ๋ฏผํ•˜๋˜ ๋‚˜ ์ž์‹ ์ด ๋– ์˜ค๋ฅธ๋‹ค ใ…Ž ์–ด์ฉƒ๋“  ์˜ค๋Š˜๋„ ์ง€์‹ +1 ๐Ÿ’ช

[๋‚ด์šฉ ์ฐธ์กฐ] https://director-joe.kr/27

0๊ฐœ์˜ ๋Œ“๊ธ€