๊ถ๋ ฅ์ ๋ํ ํ์์ ํ์ด ์๋๋ผ ์ฝํจ์ ๋ฟ๋ฆฌ๋ฐ๊ณ ์๋ค. โ์๋ฆฌํ ํ๋กฌ
๏ปฟ
1 ์์ํ๋ฉฐ #
์ฝ๋ฉ์ ํ๋ฉด์ ๋ง์ด ๋๋ ์๊ฐ ์ค ํ๋๋ "์ง์ ์์ฑํ๋ ๊ฒ์ด ์ข์๊ฐ? ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊ฐ?"์ ๋ํ ์ ํ์ด ์๊ฐ์ธ๋ก ๋ง๋ค๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก , ์ฒ์ ๊ณต๋ถํ๋๋ฐ ์์ด์ ๋๋ฌด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ฉด ๊ฒฐ๊ณผ๋ ๋นจ๋ฆฌ ๋์ค๊ฒ ์ง๋ง ์์ ์ ์ฝ๋ฉ์ค๋ ฅ์ด ๋ง์ด ๋์ง๋ ์์ ๊ฒ์ด๊ณ , ๋ชจ๋ ๊ฒ์ ๋ค ์์ฑํ๋ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ์๋๋ ๋๋ฆฌ๋๊น ์
๋ฌด์ ์ผ๋ก๋ ๋นต์ ์ด ๋ ๊ฒ์ด ๋น์ฐํ๋ค. ์ด๋ป๊ฒ ๋ณด๋ฉด, ์ผ๋ฐ C ๋ฐฐ์ด๊ณผ vector์ ์ฌ์ฉ์ฌ๋ถ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ง์ ์ฝ๋ฉํ๋ ๊ฒ๊ณผ list๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ทธ๋ฐ ์ ํ์ผ ์๋ ์๋ค.
ํ์ง๋ง, printf()๋ scanf()์ ๊ฐ์ ํจ์๋ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒ์ ๋น์ฐํ๊ฒ ์๊ฐํ๋ฉด์, ์ ๋
์๋ฃ๊ตฌ์กฐ์๋ง ๋ ์ฝ๋ฉ์ ์ฃผ์ฅํ๋ ๊ฒ์ ์ด๋ถ์ฑ์ค์ด๋ผ๊ณ ๊ฐ์ธ์ ์ผ๋ก ์๊ฐํ๋ค. ๋ฌผ๋ก ์๋ฃ๊ตฌ์กฐ๋ ํ๋๋ฒ์ ๋๋ ๋ ์ฝ๋ฉ์ ํด๋ด์ผํ์ง๋ง ๊ทธ๊ฑด ์ด๋๊น์ง๋ ์คํฐ๋์ ๋ํ ์ด์ผ๊ธฐ๊ณ , ์
๋ฌด์ ์ผ๋ก๋ ์์ ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ๋ ํ๋์ ๋ฅ๋ ฅ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋๋ STL์ ์ ํ๊ธฐ ์ด์ ์๋ ๊ฑฐ์ ์์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ ํธ์ด์๋ค. (๋ฌผ๋ก STL์ด ํ์กดํ๋ ๋ชจ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ด๊ณ ์๋ ๊ฒ์ ์๋๋ค) ์์ ์์ฑํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฑ๊ฐ์๊ฒ ๋๊ปด์ก๋ ๊ฒ์ ์ด์งํธ๋ฆฌ๋ ์๋๊ณ , ๋ณต์กํ A* ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ๋๋ ์๋ ๋ฐ๋ก ๋ฐฐ์ด์ ์ฌ์ฉํ ๋์๋ค. ์๊ฐ๋ณด๋ค ๋ง์ ๋ถ๋ถ์์ ์ฌ์ฉํ๋ ๋ฐ๋ ๋ถ๊ตฌํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ํด์ ํด์ผํ๋ ๋ถ๋ด๊ฐ, ์ผ์ ์ฉ๋์ด์์ ๋ฃ์ ์ ์๊ณ , ์ด๋ค ๋ฐฐ์ด์ ๋ค๋ฅธ ๋ฐฐ์ด๋ก ๋ณต์ฌํ ๋์ ๊ทธ ๋ณต์กํจ๋ฑ์ด ๋๋ฅผ ๊ดด๋กญํ๋ ์์ธ์ด์๋ค.
STL์ ํ์คํ ์ด๋ฐ ๊ณ ๋ฏผ๋ค์ ๋์ด์ค๋ค. MS VC์ ํฌํจ๋ STL์ด ๋ฒ๊ทธ๊ฐ ๋ง๋ค๋ผ๋ ์ ๋ง ๋นผ๊ณ ...-_-a (๊ฐ์ธ์ ์ผ๋ก STLPort๋ฅผ ์ถ์ฒํ๋ค) ๋ฌผ๋ก ์ธ์์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ทธ๋ ๋ฏ์ด STL์ด ๋ชจ๋ ์ผ์ ๋คํด์ฃผ๋ ์ ๊ณผ ๊ฐ์ ์กด์ฌ๋ ์๋๋ค. STL์ ๊ฐ์ ๋ถ๊ฐ์ ์กด์ฌ์ด๋ค. ๊ท์ฐฎ์ ์ผ์ ์ด๋์ ๋ ํด์ฃผ์ง๋ง, ์ ์ ์ง์ฃผ์ธ์ ๊ณ์ ์ ๊ฒฝ์ ์จ์ฃผ์ด์ผํ๋ ์กด์ฌ๊ฐ์ ๊ฑฐ ๋ง์ด๋ค. (๊ฒ๋ค๊ฐ ๊ฐ์ ๋ถ๊ฐ ์ด๋ป๊ฒ ๋ฌผ๊ฑด๋ค์ ์ ๋ฆฌํ๋ ์ง์ ๋ํ ํ์ธ๋ ํ์ํ ๊ฒ์ด๋ค. ^^) ์ด ๊ธ์์๋ ๋ฐฐ์ด์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํ ๋ ๊ฐ์ธ์ ์ผ๋ก STL์ vector, deque, list์ ๊ธฐ์ด์ ์ธ ์ฌ์ฉ๋ฒ์ ๋ํด์ ๋
ผํ๊ณ ์์์ ๋ฐํ๋ค. ์ผ๋ฐ์ ์ธ ๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ์๊ณ ์๋ค๊ณ ํ๊ณ ์งํํ๋๋ก ํ๊ฒ ๋ค. ์๋ง๋ STL์ ์ฒ์ ์ ํ๋ ์ฌ๋์๊ฒ ์ด ๊ธ์ด ์ฒ์ ์์ํ๊ธฐ์ ๋์์ด ๋์์ผ๋ฉด ํ๋ ๋ฐ๋จ์ด๋ค.
๊ฐ์ธ์ ์ผ๋ก Effective STL์ด๋ ์ฑ
์ ๋ฌด์ง๋ฌด์ง ๊ฐ๋ช
๊น๊ฒ ์ฝ์๋ค. ๋ฒ์ญ์๊ฐ ์ธํฌ๋ถ์์ ๋๋ช
์ ์ฑ
์ผ๋ก ์ถ๊ฐ๋์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋ค. (์์ด๊ฐ ์งง์ ๊น๋ญ์ ๋๋ ์ด ์ฑ
์ผ๋ก STL์ ๋ง์ ๋ถ๋ถ์ ๋ค์ ์๊ฒ ๋์๋ค) ์ด ๊ธ๋ ์๊ฒ๋ชจ๋ฅด๊ฒ ์ด ์ฑ
์ ์์ฃผ ๋ง์ด ์ฐธ๊ณ ํ๊ณ ์์์ ๋ฐํ๋ค. ^_^a
๋ค์ ํ๋ฒ ๋งํ์ง๋ง, ์ด ๊ธ์ ๊ธฐ์ด์ ์ธ ๋ด์ฉ์ ๋ด๊ณ ์๋ค. vector์ list์ ๋ํด์ ์๊ณ ์๋ ์ฌ๋์ ์๋ด๋ ์ข๋ค.
2 ์ ์ ๋ฐฐ์ด #
์ผ๋ฐ์ ์ผ๋ก C ์์ ๋ณดํต ์ฌ์ฉํ๋ ๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค.
int c[40]; // 40๊ฐ์ ๊ฐ์ ๋ฃ์ ์ ์๋ค.
์ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ด ์๋ค.
- 40๊ฐ๋ผ๋ ์ ๋ณด๋ฅผ ์ฐจํ ํ๋ก๊ทธ๋จ์์์ ์๋ ค๋ฉด ๋ณ๋์ ๋ณ์๋ฅผ ๋ง๋ค๊ฑฐ๋ ๋งคํฌ๋ก(#define๋ฌธ)๋ฅผ ์ ์ธํด์ผํ๋ค.
- 40๊ฐ ์ด์์ ์ ๋ณด๋ฅผ ๋ฃ์ ์ ์๋ค. ์ฆ, c[40] = 10;์ด๋ผ๊ณ ์คํํ๋ฉด ๊ทธ ์ฆ์ ๋ณดํธ์ค๋ฅ๊ฐ ์ผ์ด๋๊ณ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ค.
#include <vector> using namespace std; vector<int> c;
์, ๊ธธ์ด๋ฅผ ์ ์ธํ ๋ ์ง์ ํ์ง ์๋ค? ๋ผ๊ณ ์๊ฐ์ด ๋ค ๊ฒ์ด๋ค. ๋ฌผ๋ก ๋ฐฐ์ด์ ๊ธธ์ด๋ ๋ช
์ํ ์ ์๊ณ , ์ด๊ธฐ๊ฐ๋ ์จ์ค ์ ์๋ค.
vector<int> c(10, 0);์ด๊ฒ์ 10์นธ์ int ๋ฐฐ์ด์ ๋ง๋ค๊ณ , ๊ฐ ์นธ์ 0์ผ๋ก ์ด๊ธฐํํ๋ผ๋ ๋ป์ด ๋๋ค. ์ผ๋จ ์์ ๊ฐ์ด ์ ์ธํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๋ฒ๋ค์ด ๊ฐ๋ฅํ๋ค.
c[30] = 10;c์ 30๋ฒ์งธ ํญ๋ชฉ์ ๊ฐ์ 10์ด๋ค.
printf("%d\n", c.size());
์ ๋ฌธ์ฅ์ c์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
์์ฝํด๋ณด๋ฉด, vector์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋์ ์์๋ฅผ ์ถ๊ฐํ๋ฉด ์๋์ผ๋ก ๊ทธ ๊ธธ์ด๊ฐ ๋์ด๋๋ค.
- ์ด๊ธฐํ ๋ฐ ํด์ ๋ฅผ ์๋์ผ๋ก ์ํํ๋ค.
- ์ด๊ธฐํ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ช
์ํจ๊ณผ ๋์์ ๊ฐ์ ์ด๊ธฐํ๋ ๊ฐํธํ๊ฒ ์คํํ ์ ์๋ค.
3 ์ฐ์ , ์ด๋ค ๊ฒฝ์ฐ์ ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผํ๋? #
vector์ deque์ ์ ์ ๋ฐฐ์ด์ ๋ํ๋ด๊ณ , list๋ ์๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ๋ํ๋ธ๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ๋จผ์ ํด์ผ๊ฒ ๋ค. ์ฆ, ์
๋ชจ๋ '๋ฐฐ์ด'์ด๋ ๊ฒ์ ๋ํ๋ด์ง๋ง, ๊ฐ๊ฐ์ ์ฐ์ฐ์ด๋ ๋์์ ์ํํ ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ๋ ์ฌ์ฉํ๋ฉด ์ข๋ค.
| ์ปจํ ์ด๋ | ์ฌ์ฉํด์ผํ ๊ฒฝ์ฐ | (๊ฐ๊ธ์ )์ฌ์ฉํ์ง๋ง์์ผํ ๊ฒฝ์ฐ |
| vector | ๋ฐฐ์ด์ ์์์ ์์น์ ๊ฐ์ ๋น๋ฒํ๊ฒ ์ฝ์ด๋ค์ฌ์ผ ํ ๊ฒฝ์ฐ. ๊ฐ์ ์ถ๊ฐ์์ ์ ๋ฐฐ์ด์ ๋์์๋ง ๋ฐ์ํ ๊ฒฝ์ฐ. | ์ฝ๊ธฐ์์ ๋ณด๋ค ๋ฐฐ์ด์ ์ค๊ฐ์ ์ฝ์ /์ญ์ ๊ฐ ๋น๋ฒํ ์ผ์ด๋ ๊ฒฝ์ฐ.๋ฐฐ์ด์ ๋์ด ์๋ ์์ผ๋ก๋ ์ถ๊ฐ์์ ์ด ์ผ์ด๋ ๊ฒฝ์ฐ. |
| deque | ๊ฐ ์ถ๊ฐ์์ ์ ๋ฐฐ์ด์ ์ฒ์, ๋ ์์ชฝ์์ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ฌ์ ํ ์์์ ์์น์ ๊ฐ์ ๋น๋ฒํ๊ฒ ์ฝ์ด๋ค์ฌ์ผ ํ ๊ฒฝ์ฐ. | ๋ฐฐ์ด์ ์ฒ์์ ์์๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์์ ๊ฒฝ์ฐ. ๋ฐฐ์ด์ ์ค๊ฐ์ ๊ฐ์ ์ฝ์ /์ญ์ ๊ฐ ํ์ํ ๊ฒฝ์ฐ. |
| list | ๋ฐฐ์ด์ ๊ฒ์ํ๋ ๊ฒ๋งํผ ์ฝ์ /์ญ์ ๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ ๊ฒฝ์ฐ. | ์์์ ์์น์ ๊ฐ์ ์ฝ์ด์ผ ํ ๊ฒฝ์ฐ. |
์ ํ์์ ๋ณด๋ฉด, vector์ deque์ ๊ฑฐ์ ๋น์ทํ ๊ฒฝ์ฐ์์ ๋ณผ ์ ์๊ณ , list์ vector/deque์ ์๋ก ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ๊ฐ ๋ฐ๋์์ ์ ์ ์๋ค. vector์ deque์ ๊ฒฝ์ฐ๋ฅผ ์ข๋ ์์ธํ๊ฒ ๋๋์ด ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- vector๋ ๋ฐฐ์ด์ ์ต๋ ์ฉ๋์ ์์ฝํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. (reserve() ๋งด๋ฒํจ์) deque์ ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๊ฒ๋ค๊ฐ, c_str()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ, ์ผ๋ฐ C ๋ฐฐ์ด์ ์ฌ์ฉํ๋ C ๊ธฐ๋ฐ์ ํจ์๋ค๊ณผ ํธํ๋ ์ ์๋ค.
- deque์ ๋ฐฐ์ด์ ์์ ๊ฐ์ ์ถ๊ฐ/์ญ์ ํ๋ ๊ฒ์ด vector๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ค. ๋ค๋ฅธ ํจ์๋ค์ vector์ ๊ฒ๋ค๊ณผ ๊ฑฐ์ ๋น์ทํ ์๋๋ฅผ ๊ฐ์ง๋ค.
4 ๋ฐ๋ณต์(iterator)์ ๋ฃจํ #
๋ฐฐ์ด์ ๊ฐ์ง๊ณ ์ฒ๋ฆฌํ๋ ๊ฐ์ฅ ํํ ์ฝ๋์ค ํ๋๊ฐ ๋ฃจํ์ด๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ฐฐ์ด์์ ๋ชจ๋ ๊ฐ์ ํ๋ฉด์ ์ถ๋ ฅํ๋ค๊ฑฐ๋ ํ๋ ๊ฒฝ์ฐ๊ฐ ๊ทธ๋ฐ ๊ฒฝ์ฐ์ด๋ค. (์ด๊ฒ์ for_each ์๊ณ ๋ฆฌ์ฆ์ด๋ ๊ฒ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ ๊ฒ์ด ์ข์ง๋ง, ์ฌ๊ธฐ์๋ ์ง์ ๊ตฌํํ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๋๋ก ํ๋ค.) ์์ ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ๋์ด์๋ค๊ณ ํ์.
list<string> sample_list; list<string>::Iterator pList;์์์ ์ธ๊ธํ ๋ฐฐ์ด๊ตฌ์กฐ ์ค list๋ฅผ ์ฌ์ฉํด์ ์ ์ธ์ ํ๋ค. (์์์๋ ๋ฌธ์์ด์ ๋ฐฐ์ด์ ์ ์ธํ ๊ฒฝ์ฐ์ด๋ค.) ๋ค์ ์ค์ ์ ์ธํ pList๋ ๋ฐ๋ณต์(iterator)๋ผ๋ ๊ฒ์ผ๋ก C ๋ฐฐ์ด์์ ํฌ์ธํฐ ๋ณ์๊ฐ ํ๋ ์ญํ ์ ์ด๋ ํ ํ์ ์๋ ์ฌ์ฉ๊ฐ๋ฅํ ํ์์ผ๋ก ์ผ๋ฐํ์ํจ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค. ์์์์ฒ๋ผ, ์ปจํ ์ด๋์๋ ํญ์ ๋ฐ๋ณต์๊ฐ ๋ฐ๋ผ๋ค๋๋ค. (C ๋ฐฐ์ด์ ์ฌ์ฉํ ๋ ํฌ์ธํฐ๋ฅผ ๋ฐ๋์ ์ฐ๊ฒ๋๋ ๊ฒ๊ณผ ๊ฐ๋ค.)
๊ณ์ ์์ฑ์์








![[http]](/wiki/imgs/http.png)
