(출처: https://dbstndi6316.tistory.com/282 )
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_NUM, dist); // int a[3]이면 ARR_NUM은 3
- 2차원 배열 복사 :
copy(&src[0][0], &src[0][0] + ROW_NUM * COLUMN_NUM, &dist[0][0]);
- 벡터 복사 :
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
벡터를 복사할땐 copy를 쓰자!
'C++ > STL' 카테고리의 다른 글
[C++] 쌍으로 저장하기(std::pair) (0) | 2022.08.11 |
---|---|
[C++] STL의 반복자(iterator) (0) | 2022.08.07 |
[C++] 아주 기본적인 연결 리스트(std::forward_list) (0) | 2022.08.05 |
[C++] 배열의 진화형, 벡터(std::vector) (0) | 2022.07.21 |
[C++] C++의 배열(std::array) (0) | 2022.07.17 |