๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[C++] ๋ฆฌ์ŠคํŠธ(list)์™€ ๋ฒกํ„ฐ(vector)์˜ ์ฐจ์ด

by ์œ ๋ฏธ๋ฏธYoomimi 2023. 7. 31.

 

C++์—์„œ ๋ฆฌ์ŠคํŠธ์™€ ๋ฒกํ„ฐ๋Š” ๊ฐ๊ฐ ๋ฌด์—‡์ด๊ณ  ๋‘˜์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์•Œ์•„๋ณด์ž.

 

C++์˜ Standard Template Library(STL)์— ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ(๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ์ฒด ๋ณด๊ด€)๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐœ๋กœ ๋‚˜๋‰œ๋‹ค.

๊ฐ์ฒด๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณด๊ด€ํ•˜๋Š” ์‹œํ€€์Šค ์ปจํ…Œ์ด๋„ˆ (sequence container) ์™€

ํ‚ค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋Œ€์‘๋˜๋Š” ๊ฐ’์„ ์ฐพ์•„์ฃผ๋Š” ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ (associative container)๋‹ค.

 

 


 

์‹œํ€€์Šค ์ปจํ…Œ์ด๋„ˆ์— ํ•ด๋‹นํ•˜๋Š” ๋ฆฌ์ŠคํŠธ์™€ ๋ฒกํ„ฐ๋Š” ๋ฌด์—‡์ด ๋‹ค๋ฅผ๊นŒ?

 

 

๋ฒกํ„ฐ(vector)๋Š” ๋™์  ๋ฐฐ์—ด(dynamic array)๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ณ ,

๋ฆฌ์ŠคํŠธ(list)๋Š” ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Double Linked List)๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

์ด์— ๋”ฐ๋ผ ๋ฒกํ„ฐ๋Š” ์—ฐ์†์ ์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ๋ฆฌ์ŠคํŠธ๋Š” ๋ถˆ์—ฐ์†์ ์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

๋˜ ๋ฒกํ„ฐ๋Š” Random Access๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฆฌ์ŠคํŠธ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ข€ ๋” ์‰ฝ๊ฒŒ ํ’€์–ด ์ด์•ผ๊ธฐํ•ด๋ณด๋ฉด,

๋ฒกํ„ฐ๋Š” '์ธ๋ฑ์Šค'๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ๋ฐ ์ค‘๊ฐ„์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๋ฉด ๋’ค์˜ ๊ฒƒ๋“ค์„ ๋ฐ€์–ด๋‚ด๊ณ  ์ด๋ฅธ๋ฐ” '๋ผ์›Œ๋„ฃ๊ธฐ'๋ฅผ ํ•ด์•ผ ํ•˜๊ณ ,

๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ์š”์†Œ์—๋Š” 'ํฌ์ธํ„ฐ'๋ฅผ ์ด์šฉํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ

Linked ๋˜์–ด ์žˆ๋Š” ๊ตฌ์กฐ ๋•Œ๋ฌธ์— 15๋ฒˆ์งธ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด iterator๋ฅผ ํ†ตํ•ด 14๊ฐœ์˜ ์š”์†Œ๋ฅผ ํ†ต๊ณผํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

'์ธ๋ฑ์Šค' ์ ‘๊ทผ๊ณผ ๋‹ฌ๋ฆฌ 'ํฌ์ธํ„ฐ'๋ฅผ ์ด์šฉํ•œ ์ ‘๊ทผ์€ ์ฒ˜์Œ ๋˜๋Š” ๋์—์„œ ์ถœ๋ฐœํ•ด ์„ ํ˜• ํƒ์ƒ‰์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ฒฐ๋ก ์ ์œผ๋กœ ์‚ฝ์ž…, ์‚ญ์ œ์— ์žˆ์–ด์„œ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ํšจ์œจ์ ์ด๊ณ , ๊ฒ€์ƒ‰์— ์žˆ์–ด์„œ๋Š” ๋ฒกํ„ฐ๊ฐ€ ํšจ์œจ์ ์ด๋‹ค.

 

(ํ•˜์ง€๋งŒ ๋ ๊ฐ’์„ ์‚ฝ์ž…, ์‚ญ์ œ ํ•˜๋Š” ๊ฒฝ์šฐ ์‹œํ€€์Šค ์ปจํ…Œ์ด๋„ˆ list, vector, deque ์ค‘ vector๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.)