Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- TensorFlow Lite
- 알고리즘
- BFS
- 포스코 AI교육
- 자료구조
- 딥러닝
- 임베디드 딥러닝
- 그리디
- 다이나믹프로그래밍
- 코딩테스트
- 삼성코딩테스트
- 포스코 ai 교육
- 코테
- 영상처리
- bfs문제
- DP문제
- DP
- 포스코 교육
- 삼성역테
- tflite
- MCU 딥러닝
- 삼성코테
- 컴퓨팅사고
- 코테 문제
- 삼성역량테스트
- 초소형머신러닝
- dfs문제
- sort
- dfs
- tinyml
Archives
- Today
- Total
코딩뚠뚠
[개념정리] c++ 메모리 영역 복사 (memcpy, copy) 본문
반응형
코딩을 하다보면 배열 또는 벡터를 복사할 일이 생긴다.
이 때 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
반응형
'알고리즘 문제풀이 > 개념정리' 카테고리의 다른 글
[개념정리] 배열의 초기화 - fill (0) | 2021.04.24 |
---|---|
endl 과 '\n'의 차이와 사용 (0) | 2021.04.11 |
[개념정리] Big - O 시간복잡도 표기 (0) | 2021.03.13 |
[개념정리] getline의 사용 (0) | 2021.03.04 |
[개념정리] strtok (0) | 2021.03.04 |