์๊ณ ๋ฆฌ์ฆ ์ ํํ๊ธฐ
์ง๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ์ STL/STL.NET ์ปจํ
์ด๋์ ๋ด๊ธด ์์์ ๋๊ฐ์ง ๋ด์ฅ ๋ฐฐ์ด ํ์
์ ๋ด๊ธด ์์ ๋ชจ๋์ ์ด์ฉ๋ฉ๋๋ค. ์ง๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒ์(find, count), ์ ๋ ฌ(merge, partition, permutate, reverse, rotate, shuffle, sort), ์ญ์ /์นํ(remove, replace, swap, unique), ๋ณต์ฌ, ๊ด๊ณ(equal, min, max, includes), ์ฐ์ถ(fill, for-each, generate, transform), ์ค์ (union, intersection, difference), ํ(make, sort, pop, push) ์ฐ์ฐ์ ์ง์ํ ๋ฟ๋ง ์๋๋ผ, ์ถ์ (accumulate), ๋ถ๋ถํฉ(partial sum), ๋ด์ (inner product), ์ธ์ ์ฐจ(adjacent difference)๊ณผ ๊ฐ์ ๋ํดํ ์์น ์ฐ์ฐ๋ ์ง์ํฉ๋๋ค.
๋ฌผ๋ก ์ด๋ค ์ง๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํด๋น ํค๋ ํ์ผ์ ํฌํจํด์ผ ํฉ๋๋ค. ์์น ์๊ณ ๋ฆฌ์ฆ์ ์ ์ธํ ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
#include <algorithm>
C++
๋ณต์ฌ
์ถ์ (accumulate), ๋ถ๋ถํฉ(partial_sum), ๋ด์ (inner_product), ์ธ์ ์ฐจ(adjacent_difference)๋ผ๋ ๋ค๊ฐ์ง ์์น(numeric) ์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ฅธ ํค๋ ํ์ผ์ ๋ค์ด ์์ต๋๋ค. ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ค๋ฉด, ์๋์ ๊ฐ์ด ์์ฑํฉ๋๋ค.
#include <numeric>
C++
๋ณต์ฌ
(์ ๋ ์ด๋ค ๋ค๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด ์ ๋ค๋ฅธ ํค๋ ํ์ผ๋ก ๋จ์ด์ ธ ๋์๋์ง๋ฅผ ์์๋ด๋ ค ํ์ต๋๋ค. - ์ด๋ก ์ธํ์ฌ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ๊ฐ ๋ถ๋ช
๊น๋ค๋ก์์ง๋๋ค. - ํ์ง๋ง ๋ฌธ์์์๊ฑด ์ฌ๋๋ค์์๊ฑด ๊ฐ์ ์ด์ ๋ํ ๋ช
ํํ ์ค๋ช
์ ์ฐพ์๋ณผ ์ ์์์ต๋๋ค. Stepanov๊ฐ ๊ตฌํํ ์ ๊ตฌํ ์ฝ๋์๋ ์ด๋ค ๋ค๊ฐ์ง๊ฐ ๊ทธ ์ธ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํจ๊ป ํ ํค๋ ํ์ผ์์ ๋ด๊ฒจ์์ต๋๋ค. ํ์ง๋ง ํ์คํ ์์
์ด ์ด๋ฃจ์ด์ง๋ ์์ค ์์น ํค๋๊ฐ ๋ฑ์ฅํ์ฌ, ๊ฒฐ๊ตญ ์ด ํค๋๋ ํ์ค์์ ๋ฐ๋ก ์ธ๋ถํ๋ ์์น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ดํ ๋
ผ์๋ก ์ฎ๊ฒจ๊ฐ์ต๋๋ค.)
์ฌ๋ฌ๋ถ์ ์ด๋ ๊ฒ ์๊ฐํ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. "์ ๊น์, Stan, ์ด ํค๋ ํ์ผ์ ๋ชจ์์ย <cli/algorithm>์ด ๋์ด์ผ ํ๋ ๊ฒ ์๋๊ฐ์? ๊ฒฐ๊ตญ ์ด ์ปจํ
์ด๋์ ํค๋ ํ์ผ์ด ์ด๋ป๊ฒ ํ์ (qualify)๋๋๋์ ๊ฒ์ด๊น์. ์ค์ํ์ ๊ฑฐ ์๋
์?" '๋๋๊ฒ๋' ์ด ์ง๋ฌธ์ ๋ํ ๋๋ต์ "์๋์" ์
๋๋ค. ์ ๋ ์ง๊ธ '๋๋๊ฒ๋'๋ผ๊ณ ๋งํ๋๋ฐ, ์๋ํ๋ฉด ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ฝ๋๋ ๋ค์ดํฐ๋ธ STL๊ณผ STL.NET ๋ชจ๋์์ ์ฌ์ฉ๋๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ ์ฃ , ๋ฐ๋ก ์ฝ๋ ์ฌ์ฌ์ฉ์
๋๋ค!
์ข์ต๋๋ค. ์ด์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด ์ดํด๋ณด๊ธฐ๋ก ํ์ฃ . ๊ทธ ์๋ก์,ย Stringย ์์๋ค์ย map์ ๋ฃ๊ธฐ ์ ์ ์ด๋ค ์์๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ์ ๋ ฌํด๋ณด๊ธฐ๋ก ํ์ฃ . ์ฐ๋ฆฌ๋ ์ด ์์
์ย sort()ย ์ง๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ๊ฒ์
๋๋ค. ๊ฑฐ์ ๋ชจ๋ ์ง๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ธ์๋ ๋ฒ์๋ฅผ ๋ํ๋ด๋ ํ์์ ๋ฐ๋ณต์์
๋๋ค.
sort( &as[0], &as[ as->Length ] );
C++
๋ณต์ฌ
์ด ์ปฌ๋ผ์ ์ฒ์์์ ๋ณด์๋ ์ฝ๋์์๋ ๋ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ, ์ฆย find()๊ณผย remove()๊ฐ ์ฌ์ฉ๋์์ต๋๋ค.
// ์ง๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ: find
vector<String^>::iterator iter =
find( svec->begin(), svec->end(), "Pooh" );
if ( iter != svec->end() ) { ...}
// ์ง๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ: remove ...
remove( svec->begin(), svec->end(), "Rabbit" );
C++
๋ณต์ฌ
์ด ์ฝ๋์์๋ ์ฌ์ฉ ํจํด์ ์ง์คํด์ผ ํฉ๋๋ค: ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ปจํ
์ด๋๊ณผ์ ์ฐ๊ฒฐ์ ๋ฐ๋ณต์ ์์ ์ํ ์ง์ ๋ ๋ฒ์์ ์ํด ์ด๋ฃจ์ด์ง๋๋ค. ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์ปจํ
์ด๋ ๋ด์์ ์์ดํ
์ ์ฐพ์์ ๊ฒฝ์ฐ์๋ ๊ทธ ์์ดํ
์ ๋ํ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๊ณ , ์คํจํ์ ๊ฒฝ์ฐ์๋ ์ง์ ๋ ๋ฒ์์ ๋ง์ง๋ง์์ ํ๋ ์ง๋ ๊ณณ์ ๊ฐ๋ฆฌํค๋ ๋ฐ๋ณต์๋ฅผ ๋ฐํํฉ๋๋ค.
์ ๋ ์ด๋ค ์ง๋ค๋ฆญ ์๊ณ ๋ฆฌ์ฆ์ ํตํ ํฅ๋ฏธ๋ก์ด ์์
์ ๋ณด์ฌ์ค ํฐ์ด์ง๋ง, ์์ฝ๊ฒ๋ ์ด ์์
์ ๋์ค์ ์ด์ด์ง ์ปฌ๋ผ์์์ผ ๋ํ๋ ๊ฒ์
๋๋ค. ์ด ์ปฌ๋ผ์ด ์ฌ๋ฌ๋ถ์๊ฒ์ STL.NET์ ๊ดํ ๋ง์กฑ์ค๋ฌ์ด ์๊ฐ๊ธ์ด ๋์์์ผ๋ฉด ํ๋ ๋ฐ๋จ์ด๋ฉฐ, ์ด ์ปฌ๋ผ์ด STL.NET์ ๋ํ ๊ธฐ๋ณธ ์ฉ์ด์ ๊ธฐ๋ฐ ์ง์์ ์ ๊ณตํจ์ผ๋ก์จ, ์ฌ๋ฌ๋ถ ๋ํ STL.NET์ผ๋ก ๋์๊ฐ๊ฒ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ค์์ ๋ค์ ๋ต๋๋ก ํ์ฃ .
๊ฐ์ฌ์ ๋ง
์ธ ์์๋ ์ธ์ ๋ ์ด๋ฌํ ๊ฐ๋จํ ์ปฌ๋ผ์กฐ์ฐจ ๋ฌปํ๋ฒ๋ฆฌ์ง ์๋๋ก ๋์์ ์ฃผ๋ ์๋ง์ ๋ณด์ด์ง ์๋ ์์ด ์กด์ฌํฉ๋๋ค. ์ต์ข
์๊ณ ์์์กฐ์ฐจ ๋ณด์ฌ์ฃผ์๋ ์ ์ ์๋ชป๋ ์๊ฐ(์ผํ!).. ์ด์ ๋ํด ์ฌ๋ ค๊น์ ๋ฆฌ๋ทฐ๋ฅผ ํด์ฃผ์๋ Scott Currie์๊ฒ ์ ๋ ์์ฒญ๋ ๊ฐ์ฌ์ ๋น์ ์ง๊ณ ์์ต๋๋ค. Anson Tsao๋ ์ธ๋ด์ฌ์ ๊ฐ๊ณ STL.NET์ ๋ํ ๊ฐ๋ฅด์นจ์ ์ฃผ์์ผ๋ฉฐ, ์ด์ ๋๋ฌด๋๋ ๊ฐ์ฌํ๋ค๋ ๋ง์ ์ ํฉ๋๋ค. Martyn Lovell์ STL.NET์ด ์ธ์์ ์ ๋ณด์ด๊ธฐ๊น์ง์ ์กฐํ์ ์ญํ ์ ํ๊ณ ์์ผ๋ฉฐ, ์ ์๊ฒ STL.NET์ ๊ดํ ๋ง์ ๊ฒ๋ค์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก, Brian Johnson๊ณผ Ronald Laeremans์๊ฒ๋ ๊ฐ์ฌ์ ๋ง์ ์ ํฉ๋๋ค.
ํ์์ ๊ดํ์ฌ
์คํ ๋ฆฝ๋จผ(Stan Lippman)์ ๋ง์ดํฌ๋ก์ํํธ ๋ด Visual C++ํ์ ์ํคํ
ํธ์
๋๋ค. ๊ทธ๋ ๋ฒจ ์ฐ๊ตฌ์(Bell Laboratories)์์ C++์ ์ฐฝ์์์ธ Bjarne Stroustrup๊ณผ ํจ๊ป C++๋ก ์์
ํ๊ธฐ ์์ํ์ผ๋ฉฐ, ๊ทธ ์์ ์ 1984๋
๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. ๊ทธ๊ฐ ๊ทธ๋ ๋์ฆ๋(Disney)์ ๋๋ฆผ์์ค(DreamWorks)์ ์ ๋๋ฉ์ด์
(Feature Animation) ์ ์์์ ์ผ์์ด์์ผ๋ฉฐ, ํํ์ง์ 2000(Fantasia 2000)์ ์ํํธ์จ์ด ๊ธฐ์ ์ฑ
์์(Software Technical Director)์์ต๋๋ค.


