PROGRAMMING/C++ STL

๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š” C++ STL ์ž๋ฃŒ๊ตฌ์กฐ array

๐’ฎ๐’ฎ๐ผ๐’ฉ_0 2020. 8. 6. 20:30

 

 

[ STL ์ž๋ฃŒ๊ตฌ์กฐ array ]

 

 

array๋Š” ๋‹ค๋ฅธ STL ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์ด ๋™์ผํ•œ ์ž๋ฃŒํ˜•์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด STL์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐฐ์—ด ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“œ๋Š” ๋ฐฐ์—ด๋ณด๋‹ค ์ข€ ๋” ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋งŽ์€ ๋˜˜๋˜˜ํ•œ ๋ฐฐ์—ด์ด๋‹ค.

์ฆ‰, POD ๋ฐฐ์—ด์˜ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ์ผ๋„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฉด์„œ๋„ POD ๋ฐฐ์—ด๊ณผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋Š” ๊ฐ™๋‹ค.

POD๋ž€? Plain Old Data. ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์—ฐ์†์ ์ธ ๋ฐ”์ดํŠธ์—ด์„ ๋งํ•œ๋‹ค.

 

 

๋ฐฐ์—ด์€ ๋‹จ์ˆœํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋™์ผํ•œ ์ž๋ฃŒํ˜•์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—ฐ์†๋œ ๊ณต๊ฐ„์— ์ €์žฅํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ถ™์–ด์žˆ์œผ๋ฏ€๋กœ ์‹œ์ž‘ ๋ฒˆ์ง€ ์ฃผ์†Œ๋งŒ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์œผ๋ฉด

๋ฐฐ์—ด์˜ ๋‹ค๋ฅธ ์š”์†Œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ฆ‰, a[0]์— ์–ต์„ธ์Šคํ•˜๋‚˜ a[9]์— ์–ต์„ธ์Šคํ•˜๋‚˜ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๊ฐ™๋‹ค.

์ž๋ฃŒ์— ์ ‘๊ทผํ•˜๋Š” ์†๋„๋ฉด์—์„œ ์ด ๋ณด๋‹ค ๋น ๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์—†๋‹ค.

 

 

๊ทธ๋Ÿฐ๋ฐ array๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  STL ์ปจํ…Œ์ด๋„ˆ์™€๋Š” ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค.

๋‹ค๋ฅธ STL ์ปจํ…Œ์ด๋„ˆ๋Š” ์ €์žฅํ•  ์›์†Œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์–ผ๋งˆ์ธ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

array๋Š” ๊ทธ๋Ÿด ์ˆ˜ ์—†๋‹ค. array๋Š” ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์„ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฆ‰, array๋Š” ์ž๋ฃŒํ˜•์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ •ํ•ด์ ธ ์žˆ์œผ๋ฉฐ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฐœ์ˆ˜๊ฐ€ ๋ณ€๋™๋  ์ผ์ด ์—†๋‹ค.

๋”ฐ๋ผ์„œ array๋Š” ๊ฐœ์ˆ˜๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๊ณ  ์•ž์œผ๋กœ๋„ ๋ณ€๋™๋  ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋ฉฐ,์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋„ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ๋‹นํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด STL array์—๋Š” ์–ด๋–ค ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด์ž.

1. array::data()

๋ฐฐ์—ด์˜ ์‹œ์ž‘ ๋ฒˆ์ง€ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

2. array::begin() & array::end()

array ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

๋งˆ์ง€๋ง‰ ๋ฐ˜๋ณต์ž end๋Š” ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์ž.

๋งˆ์ง€๋ง‰ ์›์†Œ์˜ ๋‹ค์Œ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. **

 

3. array::front & array::back()

๋ฐฐ์—ด์˜ ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

4. array::empty()

๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

๋น„์—ˆ๋‹ค๋ฉด true, ์›์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

5. array::size() & array::max_size()

๋ฐฐ์—ด์˜ ํ˜„์žฌ ์›์†Œ ๊ฐœ์ˆ˜์™€ ์ตœ๋Œ€ ์›์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

 

array ์›์†Œ ์ˆœํšŒ

array์˜ ์›์†Œ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™๋‹ค.

๋ฒ”์œ„ ๊ธฐ๋ฐ˜ for(range-based for)๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ผ๋ฐ˜์ ์ธ for๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

[ ์ •๋ฆฌ ]

- array๋Š” ์Šค๋งˆํŠธํ•œ ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

ํด๋ž˜์Šค๋กœ ๋งŒ๋“  STL array๋Š” ๋ฐฐ์—ด์ด ๊ฐ€์ง„ ์žฅ์ ์— ๋”ํ•˜์—ฌ ๋ฐฐ์—ด์—์„œ ํ•  ์ˆ˜ ์—†์—ˆ๋˜

๊ธฐ๋Šฅ๋“ค์„ ๋ฉค๋ฒ„๋กœ ์ œ๊ณตํ•˜๋‹ˆ ์Šค๋งˆํŠธํ•œ ๋ฐฐ์—ด์ธ ๊ฒƒ์ด๋‹ค.

- array๋Š” ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ ํ• ๋‹น ํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—ฐ์†(contiguous)๋˜์–ด ์žˆ๋‹ค.

- ์ž๋ฃŒ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ •ํ•ด์ ธ ์žˆ์œผ๋ฉฐ, ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฐœ์ˆ˜๊ฐ€ ๋ณ€๋™๋  ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ

์ด๋ณด๋‹ค ๋” ์ข‹์€ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์—†๋‹ค. ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ๋‘˜ ๋‹ค์—์„œ ๋ง์ด๋‹ค.