hugDog
Android DevLog
hugDog
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ™Œ Hello? (162)
    • ๐Ÿงฉ์•ˆ๋“œ๋กœ์ด๋“œ (12)
      • ๊ฐœ๋… ์ •๋ฆฌ (5)
      • ๋ฒ„๊ทธ ํ•ด๊ฒฐ (4)
      • ๊ธฐํƒ€ (3)
    • ๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜ (54)
      • ๊ฐœ๋… (0)
      • ๋ฐฑ์ค€ (48)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
    • ๐Ÿ“„๊ฐœ๋ฐœ ์ผ์ง€ (0)
      • FINPO (0)
    • ๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (71)
      • C++ ์ •๋ฆฌ (49)
      • C++๊ธฐ์ดˆํ”Œ๋Ÿฌ์Šค ์—ฐ์Šต๋ฌธ์ œ (20)
      • Kotlin (2)
    • โญProject (1)
    • ๐ŸšดTIL (13)
      • Clean Code (13)
    • ๐Ÿšฉ๊ธฐํƒ€ (9)
      • ๋ชฉํ‘œ (6)
      • ์ผ์ƒ (3)
      • ๋ฌธ์„œ (0)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
hugDog

Android DevLog

๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์ •๋ฆฌ

C++ ์ •๋ฆฌ - 49 (copy(), ostream_iterator, istream_iterator, ๊ธฐํƒ€ ์œ ์šฉํ•œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋“ค)

2020. 12. 16. 18:11
728x90

copy(), ostream_iterator, istream_iterator

ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” copy()๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค.

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋“ค๋กœ ํ‘œํ˜„๋œ๋‹ค.

 

ex)

int casts[10] = {6,7,2,9,4,11,8,7,10,5};

vector<int> dice[10];

copy(casts,casts+10,dice.begin()); //๋ฐฐ์—ด์„ ๋ฐฑํ„ฐ์— ๋ณต์‚ฌ

 

copy() ํ•จ์ˆ˜๋Š” ๋ชฉ์ ์ง€ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ ์œ„์— ์“ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชฉ์ ์ง€ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณต์‚ฌ๋˜๋Š” ํ•จ์ˆ˜๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ปค์•ผ ํ•œ๋‹ค.

 

STL์€ ostream_iterator ํ…œํ”Œ๋ฆฟ์„ ํ†ตํ•ด ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

iterator ํ—ค๋” ํŒŒ์ผ์„ ํฌํ•จ์‹œํ‚ค๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•จ์œผ๋กœ์จ, ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

#include<iterator>

...

ostream_iterator<int,char> out_iter(cout," ");

์ด์ œ out_iter ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” cout์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋œ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜(์ด ๊ฒฝ์šฐ์—๋Š” int)๋Š” ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐํ˜•์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‘ ๋ฒˆ์งธ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜(์ด ๊ฒฝ์šฐ char)๋Š” ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์žํ˜•์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.(wchar_t๊ฐ€ ๋˜ ํ•˜๋‚˜์˜ ๊ฐ€๋Šฅํ•œ ๊ฐ’) ์ฒซ ๋ฒˆ์งธ ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜(cout)๋Š” ์‚ฌ์šฉํ•  ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์—ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์— ๋ณด๋‚ด์ง„ ๊ฐ ํ•ญ๋ชฉ ๋’ค์— ํ‘œ์‹œ๋˜๋Š” ๋ถ„๋ฆฌ์ž์ด๋‹ค.

*out_iter++=15; //cout<<15<<" "; ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค.

์ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ copy()์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

copy(dice.begin(),dice.end(),out_iter); //๋ฒกํ„ฐ๋ฅผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์— ๋ณต์‚ฌ

 

๋˜๋Š” ์ต๋ช… ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.

copy(dice.begin(),dice.end(),ostream_iterator<int,char>(cout," "));

 

๊ฐ™์€ ๋…ผ๋ฆฌ๋กœ iteratorํ—ค๋” ํŒŒ์ผ์€ istream ์ž…๋ ฅ์„ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค์— ๋งž๊ฒŒ ๊ฐœ๋Ÿ‰ํ•˜๊ธฐ ์œ„ํ•œ istream_iterator ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•œ๋‹ค. ๋‘ ๊ฐœ์˜ istream_iterator ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜์—ฌ copy()์— ์ž…๋ ฅ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

copy(istream_iterator<int,char>(cin), istream_iterator<int,char>(), dice.begin());

 

istream_iterator๋Š” ๋‘ ๊ฐœ์˜ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ฝ์„ ๋ฐ์ดํ„ฐํ˜•์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‘ ๋ฒˆ์งธ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์— ์‚ฌ์šฉ๋˜๋Š” char ๋ฐ์ดํ„ฐํ˜•์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ cin์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€, cin์ด ๊ด€๋ฆฌํ•˜๋Š” ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์€, ์ž…๋ ฅ ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์˜ ์ฝ”๋“œ๋Š” ํŒŒ์ผ ๋, ๋ฐ์ดํ„ฐํ˜• ๋ถˆ์ผ์น˜ ๋˜๋Š” ๋‹ค๋ฅธ ์–ด๋–ค ์ž…๋ ฅ ์‹คํŒจ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๊นŒ์ง€ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค.

 

-๊ธฐํƒ€ ์œ ์šฉํ•œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋“ค

reverse_iterator๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋ณธ์งˆ์ ์œผ๋กœ๋Š” ๊ทธ๊ฒƒ์„ ๊ฐ์†Œ์‹œํ‚จ๋‹ค. 

vector ํด๋ž˜์Šค๋Š” past-the-end๋ฅผ ์ง€์‹œํ•˜๋Š” reverse_iterator๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” rbegin()์ด๋ผ๋Š” ๋ฉค๋ฒ„ ํ•จ์ˆ˜์™€, ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ง€์‹œํ•˜๋Š” reverse_iterator๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” rend() ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

copy(dice.rbegin(), dice.rend(),out_iter); //ํ›„์ง„์œผ๋กœ ์ถœ๋ ฅ

reverse_iterator๋Š” ์„ ์–ธํ•  ํ•„์š”์กฐ์ฐจ ์—†๋‹ค.

rp๊ฐ€ dice.rbegin()์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜๋Š” ์—ญ๋ฐฉํ–ฅ ํฌ์ธํ„ฐ๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž. ์—ญ๋ฐฉํ–ฅ ํฌ์ธํ„ฐ๋“ค์€ ๋จผ์ € ๊ฐ์†Œ์‹œํ‚จ ํ›„์— ๋‚ด์šฉ ์ฐธ์กฐ๋ฅผ ํ•œ๋‹ค. ์ฆ‰, *rp๋Š” *rp์˜ ํ˜„์žฌ ๊ฐ’ ๋ฐ”๋กœ ์•ž์— ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ’์„ ๋‚ด์šฉ ์ฐธ์กฐํ•œ๋‹ค.

 

์‚ฝ์ž…์€ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์œ„์— ์“ฐ์ง€ ์•Š๊ณ  ์ƒˆ ์›์†Œ๋“ค์„ ์ถ”๊ฐ€ํ•˜๋ฉฐ, ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ์ •๋ณด์— ๊ผญ ๋งž๋Š” ๊ณต๊ฐ„์„ ํ™•๋ณดํ•œ๋‹ค. back_insert_iterator๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋ง๋ฏธ์— ์›์†Œ๋“ค์„ ์‚ฝ์ž…ํ•œ๋‹ค. front_insert_iterator๋Š” ์ปจํ…Œ์ด๋„ˆ ์„ ๋‘์— ์›์†Œ๋“ค์„ ์‚ฝ์ž…ํ•œ๋‹ค. insert_iterator๋Š” insert_iterator ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •๋œ ์œ„์น˜ ์•ž์— ์›์†Œ๋“ค์„ ์‚ฝ์ž…ํ•œ๋‹ค. ์ด ์„ธ ๊ฐ€์ง€๋Š” ๋ชจ๋‘ ์ถœ๋ ฅ ์ปจํ…Œ์ด๋„ˆ ๊ฐœ๋…์˜ ๋ชจ๋ธ๋“ค์ด๋‹ค.

 

back_insert_iterator๋Š” ๋ง๋ฏธ์— ๋น ๋ฅธ ์‚ฝ์ž…์„ ํ—ˆ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆํ˜•์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ("๋น ๋ฅธ ์‚ฝ์ž…" ์ด๋ž€ ๊ณ ์ • ์‹œ๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜๋ฏธ) vector ํด๋ž˜์Šค๋Š” ์ œํ•œ์„ ํ•œ๋‹ค. front_insert_iterator๋Š” ์„ ๋‘์— ๊ณ ์ • ์‹œ๊ฐ„ ์‚ฝ์ž…์„ ํ—ˆ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆํ˜•์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ vector ํด๋ž˜์Šค๋Š” ์ œํ•œ์„ ํ•˜์ง€ ์•Š์ง€๋งŒ, queue ํด๋ž˜์Šค๋Š” ์ œํ•œ์„ ํ•œ๋‹ค. insert_iterator๋Š” ์ด๋Ÿฌํ•œ ์ œํ•œ์ด ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ front_insert_iterator๋Š” ๊ทธ๊ฒƒ์„ ์ง€์›ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆํ˜•๋“ค์— ๋Œ€ํ•ด ๋” ๋น ๋ฅด๋‹ค.

 

์ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋“ค์€ ์ปจํ…Œ์ด๋„ˆํ˜•์„ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, dice๋ผ๋Š” vector<int> ์ปจํ…Œ์ด๋„ˆํ˜•์— ๋Œ€ํ•ด back_insert_iterator๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•œ๋‹ค. 

back_insert_iterator<vector<int>> back_iter(dice);

front_insert_iterator๋„ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.

insert_iterator์„ ์–ธ์€ ์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ถ”๊ฐ€๋œ๋‹ค.

insert_iterator<vector<int>>insert_iter(dice,dice.begin());

 

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ
    '๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์ •๋ฆฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • C++ ์ •๋ฆฌ - 48 (ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ปจํ…Œ์ด๋„ˆ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ดํ„ฐ๋ ˆ์ดํ„ฐ, ํ•จ์ˆ˜ ๊ฐ์ฒด, vector ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค, Range์— ๊ธฐ์ดˆํ•œ ๋ฃจํ”„(c++11))
    • C++ ์ •๋ฆฌ - 47 (์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค, auto_ptr ํ…œํ”Œ๋ฆฟ, ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ๊ณ ๋ ค์‚ฌํ•ญ, auto_ptr ๋ณด๋‹ค unique_ptr์ด ๋” ์ข‹์€ ์ด์œ , unique_ptr์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ์„ ํƒ)
    • C++ ์ •๋ฆฌ - 46 (string : c++11 ์ƒ์„ฑ์ž๋“ค, string ํด๋ž˜์Šค ์ž…๋ ฅ, ๋ฌธ์ž์—ด ์ž‘์—…, ์˜ค๋ฒ„ ๋กœ๋”ฉ๋œ find() ๋ฉ”์„œ๋“œ)
    • C++ ์ •๋ฆฌ - 45 (RTTI, dynamic_cast ์—ฐ์‚ฐ์ž, typeid ์—ฐ์‚ฐ์ž์™€ type_info ํด๋ž˜์Šค, ๋ฐ์ดํ„ฐํ˜• ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž, string ํด๋ž˜์Šค)
    hugDog
    hugDog
    ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ ์ค‘์ธ ํ•™์ƒ์ž…๋‹ˆ๋‹ค!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”