본문 바로가기

C++/copy() & std::ostream_iterator<int>(cout, " ")

@lambone2025. 6. 10. 16:07

< 출처 >

- 강의명

C++ 코딩테스트 완전 정복 : 입문부터 실전 모의고사까지

 

- 목차

3-2 배열 [49:25]

 

< 내용 >

#include <algorithm>에 정의된 STL 함수

copy(시작위치, 끝위치, 목적지);

 

시작부터 끝까지 복사해서 목적지에 보낸다.

 

아래의 경우, vec에 있는 모든 값을 출력하기 위한 C++ STL 방식.

// 1
copy(vec.begin(), vec.end(), std::ostream_iterator<int>(cout, " "));

// 2
for (int i = 0; i < vec.size(); i++)
{
    cout << vec[i] << " ";
}

 

- vec.begin(), vec.end()

vec 벡터의 처음부터 끝까지 반복자(iterator)를 의미하므로,

즉, vec의 모든 요소를 대상으로 한다는 뜻.

 

- std::ostream_iterator<int>(cout, " ")

ostream_iterator 이것은 출력 스트림에 값을 하나씩 출력할 수 있는 반복자(iterator).

int형 요소들을 cout으로 각 요소 사이에 " "(공백)을 넣어서 출력하겠다는 의미.

 

ostream_iterator은 cout 같은 출력장치에 "반복자처럼" 하나씩 데이터를 넘겨주는 역할.

STL 알고리즘들은 데이터 범위를 반복자(iterator)*로 다룬다고 한다.

그래서 copy() 같은 함수도 출력 스트림에 데이터를 보내기 위해 반복자 형태로 받아야 한다고 한다.

그래서 ostream_iterator는 cout을 출력 반복자로 포장하였다.

 

생성자 인자 별 설명을 덧붙이자면,

cout : 데이터를 어디에 출력할지 지정 (여기서는 콘솔창)

" " : 각 출력 데이터 사이에 넣을 구분자 (여기서는 공백 한 칸)

 

다시 정리하면, cout에 int 값을 출력하는 출력 반복자이며, 각 값 사이에 공백을 출력한다

 

lambone
@lambone :: Unreal Storage

Unreal 학습 기록

"거인의 어깨 위에 올라서라"

목차