그냥 게임개발자
copy() 본문
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 |