알고리즘 문제풀이/개념정리
[개념정리] c++ 메모리 영역 복사 (memcpy, copy)
로디네로
2021. 4. 24. 16:20
반응형
코딩을 하다보면 배열 또는 벡터를 복사할 일이 생긴다.
이 때 for loop를 통해 하나하나 복사를 해줄 수도 있고, memcpy를 쓸수도, copy를 쓸 수도 있을 것이다.
각각에 대해 알아보자.
1. memcpy
메모리를 조작하는 함수로는 대표적으로 memset, memcpy, memmove, memcmp 등이 있다.
그 중 memcpy는 메모리를 다른영역으로 복사하는 함수이다.
헤더파일:
- C : <string.h>
- C++ : <cstring>
기본 사용 :
void* memcpy (void* dest, const void* source, size_t num)
dest : 복사받을 곳을 가리키는 포인터
source : 복사할 메모리를 가리키는 포인터
num : 복사할 데이터의 길이 (바이트 단위)
- 배열 복사
#include <string.h>
int src[10][10]={0,};
int dist[10][10]={0,};
int main(){
src[1][1]=10;
memcpy(dist,src,sizeof(src));
return 0;
}
주의점 :
char 형태의 데이터를 복사할 때에는 \0 을 포함해주어야 하기 때문에 size에 +1을 해주어야 한다.
memcpy(dest, src, sizeof(char) * 10 + 1);
2. copy
헤더파일 :
- C++ : <algorithm>
기본 사용 :
OutputIt copy( InputIt first, InputIt last, OutputIt d_first );
first : 복사할 메모리를 가리키는 포인터
last : 복사할 메모리의 마지막을 가리키는 포인터
d_first : 복사받을 메모리를 가리키는 포인터
- 1차원 배열 복사 :
copy(src, src + ARR_SIZE, dist);
- 2차원 배열 복사 :
copy(&src[0][0], &src[0][0] + ARR_SIZE * ARR_SIZE, &dist[0][0]);
- 벡터 복사 :
src.resize(ARR_SIZE);
copy(src.begin(), src.end(), dist.begin());
- 2차원 벡터 복사:
src.resize(ARR_SIZE, vector<int>(ARR_SIZE));
copy(src.begin(), src.end(), dist.begin());
속도 :
for loop < copy =memcpy
반응형