Search
moon
sun
๐Ÿ

STL.NET Primer (4/4)

Category
as S/W ์—”์ง€๋‹ˆ์–ด
Tags
C++
C++/CLI
STL
STL.NET
Stanley Lippman
STL/CLR
.NET
Created time
2005/03/31
๐ŸSTL.NET Primer (3/4)์—์„œ ์ด์–ด์ง€๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.
๐Ÿ’ก
์ด ์ปฌ๋Ÿผ์€ STL.NET Primer๋ž€ ์ œ๋ชฉ์œผ๋กœ MSDN์— ํฌ์ŠคํŒ…๋œ ๊ธ€์„ ๋ฒˆ์—ญํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒํ•˜๊ธฐ

์ง€๋„ค๋ฆญ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ 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)์˜€์Šต๋‹ˆ๋‹ค.