Search
moon
sun
๐Ÿ

STL.NET Primer (3/4)

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

๊ธฐ๋ฐ˜ ์ง€์‹ ์ •์˜

STL.NET ์„ ์•Œ์•„๊ฐ€๋Š” ๋ฐ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค: ํ•˜๋‚˜๋Š” STL๊ณผ STL.NET์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” STL๊ณผ STL.NET์ด ๊ณตํ†ต์ ์„ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋‘˜์˜ ์ฐจ์ด์ ์„ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฏธ STL์„ ๋ง›๋ณด์•˜๋˜ ์‚ฌ๋žŒ์—๊ฒŒ๋งŒ ์™€๋‹ซ์„ ๋ฒ•ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, (๋…ํ•œ ์—ฐ๊ธฐ๋กœ ์งˆ์‹์‹œํ‚ค๋Š” ๋“ฏํ•œ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋‚ฏ์„  ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์„ค๋ช…์€ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. ๋งํ•˜์ž๋ฉด, ์ปจํ…Œ์ด๋„ˆ์˜ ์„ธ๋ฐ€ํ•œ ํŠน์ง•, ๊ทธ๋ฆฌ๊ณ ย Systemย ์ปฌ๋ ‰์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ์ƒํ˜ธ์šด์šฉ ์›๋ฆฌ๋ผ๋Š” ๋‚œํ•ดํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์„ค๋ช…์„ ์ž์ œํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๋“ค ์‚ฌํ•ญ๋„ ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋“ค ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊นŠ์ด ๋น ์ง„ ์ƒˆ๋กœ์šด ๋ˆ„๊ตฐ๊ฐ€์˜ ๋ชซ์œผ๋กœ ๋‚จ๊ฒจ๋‘๋Š” ํŽธ์ด ๋” ๋‚ฌ์ง€ ์•Š์„๊นŒ์š”? ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์•„๋ž˜์— ์ด์–ด์งˆ ๋‚ด์šฉ - ์ž…๋ฌธ์ž๋ฅผ ์œ„ํ•œ ๋‚ด์šฉ- ์— ๋‹ด๊ธด ์ €์˜ ์˜๋„์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ ์ทจํ•จ์œผ๋กœ์จ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ฒ˜์Œ ๋ฐœ์„ ๋‚ด๋”›๋Š” ์‚ฌ๋žŒ์€, STL๊ณผ STL.NET ๋ชจ๋‘๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ™•์žฅ๋œ ๋ชจ๋ธ, ์ฆ‰ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ(parameterized) ์ปฌ๋ ‰์…˜์— ๊ธฐ๋ถ„์ข‹๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด STL๊ณผ STL.NET์ด ๊ณต์œ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋ฌด์—‡์ผ๊นŒ์š”? ์ด ๋‘˜ ๋ชจ๋‘ ์ˆœ์ฐจ(sequential) ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ด€(associative) ์ปจํ…Œ์ด๋„ˆ์ด๋ž€ ๋‘ ๊ฐœ์˜ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ์™€ ์ง€๋„ค๋ฆญ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋งž์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด STL์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด, ์–ด๋–ค ๋‚ด์šฉ์ด ์ด์–ด์งˆ์ง€ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค ํ•˜๋”๋ผ๋„, ์ด ์ ˆ์€ ๊ธฐ๋ณธ ์šฉ์–ด์™€ ๊ธฐ๋ฐ˜ ์ง€์‹์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ํ• ์• ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋Ÿฌํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ธ๋‚ด์‹ฌ์„ ์š”์ฒญํ•˜๋Š” ๋ฐ”์ž…๋‹ˆ๋‹ค.) ์ง€๋„ค๋ฆญ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ปจํ…Œ์ด๋„ˆ ํƒ€์ž…์— ์ง์ ‘์ ์œผ๋กœ ์šด์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ๋Œ€์‹ , ์ด๋“ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์šด์šฉํ•  ์š”์†Œ์˜ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ˜๋ณต์ž(iterator)๊ฐ€ ๋„˜์–ด๊ฐ€๋Š”๋ฐ, ํ†ต์ƒ ์ด๋“ค ๋ฐ˜๋ณต์ž๋ฅผ ๊ฐ€๋ฆฌ์ผœ first์™€ last๋ผ ์นญํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹์ ์œผ๋กœ ์ขŒ์ธก ํฌํ•จ ๊ฐ„๊ฒฉ(left-inclusive interval)์ด๋ผ ์ด๋ฆ„๋ถ™์€ ์•„๋ž˜์˜ ์š”์†Œ ๋ฒ”์œ„ ํ‘œ๊ธฐ๋ฒ•์€,
// "first์™€ last๊นŒ์ง€์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์ง€๋งŒ last๋Š” // ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. [ first, last )
C++
๋ณต์‚ฌ
๋ฒ”์œ„๊ฐ€ย first์—์„œย last๊นŒ์ง€์ง€๋งŒ (first์™€๋Š” ๋‹ฌ๋ฆฌ)ย last๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.ย first์™€ย last๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ ๋ฒ”์œ„ ์•ˆ์— ์–ด๋– ํ•œ ์š”์†Œ๋„ ์—†๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
์ˆœ์ฐจ(sequential) ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๋‹จ์ผ ํƒ€์ž…์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ •๋ˆ๋œ ์š”์†Œ๋“ค์ด ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ˆœ์ฐจ ์ปจํ…Œ์ด๋„ˆ๋Š”ย vector์™€ย listย ํƒ€์ž…์ž…๋‹ˆ๋‹ค. (์„ธ ๋ฒˆ์งธ ์ˆœ์ฐจ ์ปจํ…Œ์ด๋„ˆ์ธ - '๋ฐํฌ'๋ผ๊ณ  ์ฝ์Šต๋‹ˆ๋‹ค - ๋Š”ย vector์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€๋งŒ, ๋งจ ์•ž ์š”์†Œ์— ๋Œ€ํ•œ ํšจ์œจ์ ์ธ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์— ํŠนํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ(queue)๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š”ย vector๋ณด๋‹ค๋Š”ย deque๊ฐ€ ๋” ๋‚ฌ์Šต๋‹ˆ๋‹ค.)
์ˆœ์ฐจ ์ปจํ…Œ์ด๋„ˆ ํƒ€์ž…๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ์— ์•ž์„œ ํ•ด์•ผํ•  ๊ฒƒ์€, ๋‹ค์Œ์˜ ํ—ค๋” ํŒŒ์ผ ์ค‘์—์„œ ์ ์ ˆํ•œ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
#include <cli/vector> #include <cli/list> #include <cli/deque>
C++
๋ณต์‚ฌ
์ด๋“ค ํ—ค๋” ํŒŒ์ผ์—๋Š”ย interface_vector์™€ ๊ฐ™์€ ๊ณต์œ ๋˜๋Š” ๊ธฐ์ดˆ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์„ ์–ธ๋ถ€์™€,ย generic_vector๋“ฑ์˜ ์ด๋“ค ์ปจํ…Œ์ด๋„ˆ์˜ ํ˜•์ œ๋ป˜ ์ปจํ…Œ์ด๋„ˆ๋„ ํ•จ๊ป˜ ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค.
STL.NET ์ปจํ…Œ์ด๋„ˆ๋Š” ์ฐธ์กฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์„ ์–ธ๋ถ€์—๋Š” ํŠธ๋ž˜ํ‚น ํ•ธ๋“ค(tracking handle)์ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ์ž๋™์ ์œผ๋กœย nullptr๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š”ย gcnewย ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ ˆ์—์„œ ์ด๋ฏธ ์ด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๊ธด ํ–ˆ์ง€๋งŒ, ์—ฌ๊ธฐ์— ํ•œ๋ฒˆ ๋” ๋ช…์‹œํ•˜๋„๋ก ํ•˜์ฃ .
void f() { // ๋นˆ vector๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค . . . vector<String^>^ = gcnew vector<String^>; // ๊ธฐ๋ณธ์ ์œผ๋กœ nullptr๋กœ ๊ฐ๊ฐ ์„ค์ •๋˜์–ด ์žˆ๋Š” // 10๊ฐœ ์š”์†Œ๊ฐ€ ๋‹ด๊ธด ๋ฆฌ์ŠคํŠธ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. list<Object^>^ olist = gcnew list<Object^>( 10 ); // ํŠธ๋ž˜ํ‚น ํ•ธ๋“ค์€ nullptr๋กœ ์ž๋™ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. deque<int>^ ideck; // ๋ญ”๊ฐ€ ํฅ๋ฏธ๋กœ์šด ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค . . . };
C++
๋ณต์‚ฌ
์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์„ ์–ธ๋ฒ•๊ณผ ์šฉ๋ฒ•์— ๊ด€ํ•ด์„œ๋Š” ์ด ์—ฐ์žฌ๋ฌผ์˜ ๋‹ค์Œ ์ปฌ๋Ÿผ์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ๋Š” ์š”์†Œ์˜ ๋ณด๊ด€๊ณผ ๋˜์ฐพ๊ธฐ(retrieval)์— ๋Œ€ํ•œ ์งˆ์˜(query)๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๋‘ ๊ฐ€์ง€ ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ ํƒ€์ž…์€ย map๊ณผย set์ด์ฃ .ย map์€ key์™€ value ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. key๋Š” ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๊ณ , value์—๋Š” ์ €์žฅํ•˜๊ณ  ๋˜์ฐพ์•„์˜ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ „ํ™”๋ฒˆํ˜ธ๋ถ€๋Š” ์†์‰ฝ๊ฒŒย map์„ ์ด์šฉํ•˜์—ฌ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ key๋Š” ๊ฐœ๊ฐœ์˜ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๊ณ , value๋Š” ๊ทธ ์ด๋ฆ„์— ์—ฐ๊ด€๋œ ์ „ํ™” ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
map์€ ์ž์‹ ์˜ ๊ธฐ์ดˆ๋ฅผ ์ด๋ฃจ๋Š” ํŠธ๋ฆฌ ์ถ”์ƒ์ฒด(tree abstraction)์„ ์ด์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ์˜ค๋ฆ„์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.ย hash_mapย ์ปจํ…Œ์ด๋„ˆ๋Š” ๋˜์ฐพ๊ธฐ(retrieval) ๋ช…๋ น์— ์žˆ์–ด ์ข€๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒย hash_map์˜ ๋ฐ˜๋ณต(iteration)์€ ๋‹ค์†Œ ์ž„์˜์ ์ธ ์ˆœ์„œ(random order)๋กœ ๊ฐ ์š”์†Œ์— ์ ‘๊ทผ(access)ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋˜์ฐพ๊ธฐ๊ฐ€ ์ฃผ๋œ ๋ชฉ์ ์ด๋ผ๋ฉดย hash_map์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
set์€ ๋‹จ์ผ key ๊ฐ’๋“ค๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ทธ ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ์˜(query)์— ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ…์ŠคํŠธ ์งˆ์˜ ์‹œ์Šคํ…œ(text query system)์„ ๋งŒ๋“ค ๊ฒฝ์šฐ์—๋Š” ํ…์ŠคํŠธ์— ๋‹ด๊ธด ๋‹จ์–ด๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„  the, and, but๋“ฑ๊ณผ ๊ฐ™์€ ์ œ์™ธ์‹œํ‚ฌ ์ผ๋ฐ˜ ์–ดํœ˜ ๋ชฉ๋ก์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์€ ํ…์ŠคํŠธ์— ๋‹ด๊ธด ๊ฐ ๋‹จ์–ด๋ฅผ ์ฐจ๋ก€๋กœ ์ฝ์–ด, ์ฝ์–ด๋‚ธ ๋‹จ์–ด๊ฐ€ ์ œ์™ธ ๋‹จ์–ด ๋ชฉ๋ก์— ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ , ์งˆ์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๊ทธ ๋‹จ์–ด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ฒ„๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.ย set๋ฟ๋งŒ ์•„๋‹ˆ๋ผ,ย hash_set์ด๋ž€ ์ปจํ…Œ์ด๋„ˆ๋„ ์žˆ๋Š”๋ฐ, ์ด๋“ค ๊ฐ„์˜ ์ผ๋ฐ˜์  ํŠน์ง•์€ย map๊ณผย hash_map๊ฐ„์— ๋ณด์ด๋Š” ์ผ๋ฐ˜์  ํŠน์ง•๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
map๊ณผย set์— ๋‹ด๊ธธ ๊ฐ key๋Š” ๊ฐ๊ธฐ ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒย multimap๊ณผย multiset์€ ์ค‘๋ณต๋œ key๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€๋Š” ํ•œ ๊ฐœ์ธ์— ์†ํ•œ ์—ฌ๋Ÿฌ ์‚ฌํ•ญ์ด ๊ธฐ์žฌ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด ๊ฒฝ์šฐ์—ย multimap์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฐ–์—๋„ย hash_multimap๊ณผย hash_multiset์ด๋ž€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋“ค ์ปจํ…Œ์ด๋„ˆ ํƒ€์ž…์— ๋Œ€ํ•œ ํ—ค๋” ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
//map๊ณผ multimap์˜ ๊ฒฝ์šฐ #include <cli/map> //set๊ณผ multiset์˜ ๊ฒฝ์šฐ #include <cli/set> //hash_map๊ณผ hash_multimap์˜ ๊ฒฝ์šฐ #include <cli/hash_map> //hash_set๊ณผ hash_multiset์˜ ๊ฒฝ์šฐ #include <cli/hash_set>
C++
๋ณต์‚ฌ

๊ฐ„๋‹จํ•œ ๋ฐ๋ชจ

์ด์ œ ์˜ˆ์ œ๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ ์ข€๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋„๋ก ํ•˜์ฃ . ๋‹ค์Œ์€ ํ…์ŠคํŠธ ํŒŒ์ผ์— ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์€ย map๊ณผย hash_set, ๊ทธ๋ฆฌ๊ณ ย vector์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ•˜๋‚˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
map<String^, int>^ build_word_count( vector<array<String^>^>^ words, array<String^> ^common_words )
C++
๋ณต์‚ฌ
ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ(syntax)์€ ์—ฌ๋Ÿฌ๋ถ„์ด ์ด์— ์ต์ˆ™ํ•ด์ง€๊ธฐ ์ „๊นŒ์ง€๋Š” ์ •์‹  ์—†์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์ด๋ฅผ ๋ถ„์„ํ•ด๋ณด๋„๋ก ํ•˜์ฃ .ย build_word_count()์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ย map์œผ๋กœ์„œ, ์ดย map์˜ key๋Š” ์ด ํŒŒ์ผ์˜ ๊ฐ๊ธฐ ๊ณ ์œ ํ•œ ๋‹จ์–ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด(string)์ด๊ณ , value๋Š” ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋‹ด๊ธด ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ด ํŒŒ์ผ์— ๋‹ด๊ธด ๊ฐ ๋‹จ์–ด๋“ค์„ ๋ฌธ์ž์—ด ์š”์†Œ๋กœ ๊ฐ–๋Š” CLI ๋ฐฐ์—ด ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹จ์–ด ๊ฐœ์ˆ˜ ์„ธ๊ธฐ์— ์žˆ์–ด ์ œ์™ธ์‹œํ‚ฌ ๋‹จ์–ด๋“ค์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.
์œ„ ์„ ์–ธ๋ฌธ์—๋Š” ์—ฌ๋Ÿฌย ^(hat์ด๋ผ๊ณ  ๋ถ€๋ฅด๋”๊ตฐ์š”. ์—ญ์ฃผ)์ด ๋‹ซ๊ธฐ ๊ด„ํ˜ธ์™€ ํ•จ๊ป˜ ๋„๋ ค ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์žฅ์€ ํ•œ์Œ์˜ย typedef์„ ์ด์šฉํ•˜์—ฌ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
typedef array<String^>^ words; typedef vector<words>^ text;
C++
๋ณต์‚ฌ
์œ„ย typedef๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
map<String^ int>^ build_word_count( text theText, words common )
C++
๋ณต์‚ฌ
๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ๋œย mapย ๋˜ํ•œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ์ปฌ๋Ÿผ์„ ์ฝ๋Š” ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์—ฐ์Šต์ด ๋˜๋ผ๊ณ  ๋†”๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์œ„ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ์ž‘์—…์„ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ๊ฒƒ์ž…๋‹ˆ๋‹ค: ์•„๋ž˜์— ๋ณด์ด๋Š” ๋ฐ”์™€ ๊ฐ™์ด, (1)์šฐ๋ฆฌ์˜ย map๊ณผย hash_set์— ๋Œ€ํ•œ ์ดˆ๊ธฐํ™”, ๊ทธ๋ฆฌ๊ณ  (2)ํ…์ŠคํŠธ ๊ทธ ์ž์ฒด์— ๋Œ€ํ•œ ์‹ค์ œ ์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค.
// ํ•ญ๋ชฉ #1: ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์ดˆ๊ธฐํ™” // ํฌ๊ธฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ ๋น„์–ด์žˆ๋Š” map์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค . . . map<String^, int> ^wordOccur = gcnew map<String^, int> // ๋ฐฐ์—ด์— ๋‹ด๊ธด ์š”์†Œ๋“ค๋กœ hash_set์„ ์ฑ„์›๋‹ˆ๋‹ค. hash_set<String^> ^comWords = gcnew hash_set<String^>( &common[0], &common[common->Length]);
C++
๋ณต์‚ฌ
์—ฌ๋Ÿฌ๋ถ„์ด STL์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด,ย hash_set์— ๋Œ€ํ•œ ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„์ด ์ง€์ €๋ถ„ํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ตฌ๋ฌธ์„ ๋–ผ์–ด๋†“๊ณ  ๋ณธ๋‹ค๋ฉด, ์‚ฌ์‹ค ์ด ์„ ์–ธ๋ฌธ์€ ์ง๊ด€์ ์ด๊ณ ๋„ ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ย hash_set์„ ๋ฐฐ์—ด์— ๋‹ด๊ธด ์š”์†Œ๋“ค๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์šฐ๋ฆฌ๋Š” ์ด๋ฅผย for eachย ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ ์š”์†Œ๋“ค์„ ๋ฐฉ๋ฌธ(iterating)ํ•จ์œผ๋กœ์จ ๋ช…์‹œ์ ์œผ๋กœ ์ด๋ค„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,
// hash_set๋ฌธ์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. // ํŒŒํŠธ #1: ๋นˆ hash_set์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. hash_set<String^> ^comWords = gcnew hash_set<String^>; // ํŒŒํŠธ #2: ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค๋กœ hash_set์„ ์ฑ„์›๋‹ˆ๋‹ค. for each ( String^ wd in common ) comWords->insert( wd );
C++
๋ณต์‚ฌ
๋ฐฐ์—ด์— ๋‹ด๊ธด ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ, ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ์œ ํšจ ์š”์†Œ๋ฅผ ํ•˜๋‚˜ ๋„˜๊ธด ์š”์†Œ์˜ ์ฃผ์†Œ๋ฅผย hash_setย ์ƒ์„ฑ์ž์— ๋„˜๊น€์œผ๋กœ์จ,ย hash_set์„ ๋™์ผํ•˜๊ฒŒ ์ฑ„์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐœ์˜ ์ฃผ์†Œ๋Š”ย hash_setย ์ƒ์„ฑ์ž๊ฐ€ ๋ฐฉ๋ฌธ(iterating)ํ•  ์š”์†Œ๋“ค์˜ ๋ฒ”์œ„๋ฅผ ์•Œ๋ ค์ฃผ์–ด, ์ด๋“ค ์š”์†Œ๋ฅผ ์ด ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด ์ ˆ ์ฒ˜์Œ์—์„œ ์ œ๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋˜ ๋ฐ˜๋ณต์ž ๋ฒ”์œ„(iterator range)์— ๊ด€ํ•œ ๊ด€์šฉ๊ตฌ์ž…๋‹ˆ๋‹ค.
์œ„ ์ฝ”๋“œ์˜ ๋‘ ๋ฒˆ์งธ ๋‹จ์€ ํ…์ŠคํŠธ๋ฅผ ์‹ค์งˆ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์•„์ง ์šฐ๋ฆฌ๋Š” ๋ฐ˜๋ณต์ž๋ฅผ ๊ณต์‹์ ์œผ๋กœ ๋‹ค๋ฃจ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ œ๋ถ€ํ„ฐ ํ”ํžˆ ๋งŽ์ด ์“ฐ๋Š”ย forย ๋ฃจํ”„๋ฅผ ์ด์šฉํ•˜์—ฌย vectorย ์•ˆ์„ ์ˆœํšŒํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š”ย for eachย ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌย vector์— ๋‹ด๊ธด ๊ฐ๊ฐ์˜ ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ด์— ๊ด€ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
// ๊ฐ๊ฐ์˜ ๋ฐฐ์—ด์— ์ฐจ๋ก€๋กœ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. for ( int ix = 0; ix < theText->size(); ++ix ) { for each ( String^ wd in theText[ ix ] ) if ( common->find( wd ) == common->end() ) word_map[ wd ]++; } // word_map์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง™์‹œ๋‹ค . . . return word_map;
C++
๋ณต์‚ฌ
find()๋Š”ย hash_setย ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋กœ์„œ, ํŠน์ • ์•„์ดํ…œ์ด ์ด ์ปจํ…Œ์ด๋„ˆ์— ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ์ ์œผ๋กœ, ๋ชจ๋“  ์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ๋Š”ย find()ย ๋ฉค๋ฒ„๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. (๋งž์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ(built-in) ๋ฐฐ์—ด์„ ํฌํ•จํ•œ ์ˆœ์ฐจ ์ปจํ…Œ์ด๋„ˆ, ๊ทธ๋ฆฌ๊ณ  STL/STL.NET ๋ชจ๋ธ์— ํ†ตํ•ฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—๋Š”ย find()ย ์ง€๋„ค๋ฆญ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ถ„๋ฆฌ๋Š” ์‹ค์ œ๋ณด๋‹ค๋Š” ์ด๋ก ์ ์œผ๋กœ ๋”์šฑ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆย listย ์ˆœ์ฐจ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ทธ๋Ÿฌํ•ฉ๋‹ˆ๋‹ค.) ์ด ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ์ œ๊ฐ€ ์•„์ง ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ, ์ฆ‰ ์ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„ ์€ ๋ฐ˜๋ณต์ž๋ฅผ ํฌ์ธํ„ฐ ํƒ€์ž…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด๊ธฐ๋กœ ํ•˜์ฃ . ์ฐพ๊ณ ์ž ํ•˜๋Š” ์•„์ดํ…œ์ด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์žˆ๋‹ค๋ฉด,ย find()๋Š” ๊ทธ ์•„์ดํ…œ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ ๋งˆ์ง€๋ง‰์—์„œ ํ•˜๋‚˜ ์ง€๋‚œ ์•„์ดํ…œ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ย end()๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ˜๋ณต์ž ๊ฐ’๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. STL์—์„œ์˜ ์š”์†Œ ๊ฒ€์ƒ‰์˜ ์„ฑ๊ณต ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๊ฒฐ์ •์€ ๊ฒ€์ƒ‰ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ˜๋ณต์ž์™€ย end()๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ˜๋ณต์ž๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋“ค ๋‘ ๋ฐ˜๋ณต์ž์˜ ๊ฐ’์ด ๋™์ผํ•˜๋‹ค๋ฉด, ๊ทธ ์š”์†Œ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์—๋Š”ย begin()์™€ย end()ย ๋ฉค๋ฒ„ ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.ย begin()์€ ์ปจํ…Œ์ด๋„ˆ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ด๋ฏธ ์ œ๊ฐ€ ๋งํ–ˆ๋‹ค์‹œํ”ผ,ย end()๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ํ•˜๋‚˜ ๋„˜๊ธด ์š”์†Œ์˜ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์–ด๋–ป๊ฒŒ ๋ฐ˜๋ณต์ž๋ฅผ ์„ ์–ธํ•˜๋Š”์ง€์™€, ์–ด๋–ป๊ฒŒ ์ด๋“ค ๋‘ ๋ฉค๋ฒ„๋ฅผ ์ด์šฉํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
vector<words>::iterator first = theText->begin(); vector<words>::iterator last = theText->end();
C++
๋ณต์‚ฌ
์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ˆœํšŒ๋Š”, ๋ณดํ†ตย for๋‚˜ย whileย ๋ฃจํ”„์—์„œ first๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ,ย first์™€ย last๊ฐ€ ๊ฐ™์•„์กŒ์„ ๋•Œ ๋๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,
for ( ; first != last; ++first )
C++
๋ณต์‚ฌ
๋ฐ˜๋ณต์ž ์Œ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์ด์œ ๋Š” ์ฆ๊ฐ€ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ ์ธ ์ ์šฉ์„ ํ†ตํ•ดย first์—์„œ ์‹œ์ž‘ํ•˜์—ฌย last๊นŒ์ง€ ๋„๋‹ฌ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ์ž์‹ ์ด ์ด๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์‹คํ–‰์‹œ(run-time)์—ย ์ •์˜๋˜์ง€ ์•Š์€(undefined)ย ํ–‰๋™์„ ๋ณด์ด๊ฒŒ ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.(๋ฐ‘์ค„์นœ ์ด ๋ถ€๋ถ„์€ ํ•ด์„์ด ์• ๋งคํ•˜๊ฒŒ ๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.. ์‹ค๋ ฅ์ด ๋”ธ๋ ค์„œ๋ฆฌ.. ์—ญ์ฃผ)
์š”์†Œ ์ž์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ(access)์€ ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž(*)๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต์ž๋ฅผ ์ฐธ์กฐํ•จ์œผ๋กœ์จ ์ด๋ฃน๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ์˜ ๋ฒกํ„ฐ์—์„œ ๊ฐ๊ฐ์˜ CLI ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋˜์ฐพ๊ณ ์ž ํ•œ๋‹ค๋ฉด,ย forย ๋ฃจํ”„ ์•ˆ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ์ž…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
array<String^> ^as = *first;
C++
๋ณต์‚ฌ
์—ฐ๊ด€ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ ์–ธ๋ฒ•๊ณผ ์šฉ๋ฒ•์€ ์ด ์—ฐ์žฌ๋ฌผ์˜ ๋‚˜์ค‘ ์ปฌ๋Ÿผ์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๐ŸSTL.NET Primer (4/4)์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.