그냥 게임개발자

copy() 본문

C++ 나만의 복습

copy()

sudoju 2024. 4. 7. 18:43

memcpy()와 똑같은 동작을 하는 함수이며 vector와 Array 모두 쓸 수 있다.

 

copy (InputIterator first, InputIterator last, OutputIterator result)

 

만약 vector v를 ret에다가 옮기려면

vec : 복사당하는 vector / ret : 복사하는 vector

 

copy(vec.begin(), vec.end(), ret.begin());

 

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec {1, 2, 3};
    vector<int> ret(3);
    
    copy(vec.begin(), vec.end(), ret.begin());
    cout << ret[1] << '\n';
    
    ret[1] = 100;
    
    cout << ret[1] << '\n';
    cout << vec[1] << '\n';
    
    return 0;
}

 

이 때도 깊은 복사가 된다.

이 때 복사하는 vector와 복사당하는 vector의 크기를 맞춰주는 것이 중요하다.

vec의 크기는 3이며, ret의 크기도 3으로 설정된 것을 볼 수 있다.

 

깊은 복사가 되어 ret을 수정하더라도 vec에는 아무런 영향을 미치지 않은 것을 볼 수 있다.

 

Array의 경우 다음과 같이쓰면 된다.

 

잘 되었다. 깊은복사로

 

Array의 경우 다음과 같이 쓰면 된다.

#include <iostream>
#include <algorithm>

using namespace std;

const int n = 3;

int main()
{
    int arr[n] = {1, 2, 3};
    int ret[n];
    
    copy(v, v + n, ret);
    cout << ret[1] << '\n';
    
    ret[1] = 100;
    
    cout << ret[1] << '\n';
    cout << arr[1] << '\n';
    
    return 0;
}

 

 

잘 카피가 되었다.

 

아 참고로 C++에서 배열의 크기는 컴파일 시간에는 상수여야 한다.

n이 만약에 상수가 아닌 변수라면 vec[n] 및 ret[n]의 사용은 표준을 준수하지 않아서

모든 C++ 컴파일러에서 컴파일 되지 않을 수 있기 때문에 const 키워드를 통해서 n이 상수라는 것을 선언해줘야 한다.

 

무조건 + n은 해당 배열의 크기인 것을 주의해줘야 한다.

 

 

 

'C++ 나만의 복습' 카테고리의 다른 글

stable_sort()  (1) 2024.04.07
sort()  (0) 2024.04.07
memcpy()  (1) 2024.04.07
쓰지 말아야 할 초기화 방법 {0, }  (0) 2024.04.07
memset()  (0) 2024.04.07