안녕하세요. 오늘은 stl vector와 array의 복사에 대해 정리를 하려고 합니다.
점점 개발을 하면서 형식이 다른 정보를 넘겨줄 때가 헷갈릴때가 많이 생기네요
오늘 정리 내용은 그 중에서 가장 많이 사용하는 stl에 대한 복사 입니다.
copy에 대한 내용을 점점 추가 할 예정이기 때문에 소스코드는 가장 하단에 첨부 했습니다.
※여기서 주의 할 점은 stl에서 제공하는 copy 사용 시 Visaul Studio 버전에 따라 동적할당(new)해서 처리되는 copy를 오류로 처리됩니다. 오류 발생시 Visual Studio 전처리 1번 항목을 수행해주시기 발랍니다.(링크)
아래 소스코드를 보시면 쉽게 확인할 수 있습니다.
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#include "vector"
using namespace std;
////////////////////////////////////////////////////////////////
//1. 정적 Array -> vector ##정적 배열 데이터가 Vector로 데이터 복사
float pfArr[1001];
vector<float> vecData;
vecData.resize(1001);
copy(pfArr, pfArr + sizeof(float) * 1001, vecData.begin());
////////////////////////////////////////////////////////////////
//2. 동적 Array ->; vector ##동적 배열 데이터가 Vector로 데이터 복사
const int nArrayCnt = 1001;
float* pfArr = new float[nArrayCnt];
vector<float> vecData;
vecData.resize(nArrayCnt);
copy(pfArr, pfArr + sizeof(float) * nArrayCnt, vecData.begin());
delete[] pfArr; //! 메모리 삭제
pfArr = NULL;
////////////////////////////////////////////////////////////////
//3. vector -> 정적 Array
vector<float> vecData; //Vector데이터는 1001개 존재
float pfArr[1001];
copy(vecData.begin(), vecData.end(), pfArr);
////////////////////////////////////////////////////////////////
//4. vector -> 동적 Array
vector<float> vecData;
float* pfArr = new float[vecData.size()]; //! Vector 개수만큼 배열 할당
copy(vecData.begin(), vecData.end(), pfArr);
delete[] pfArr; //! 메모리 삭제
pfArr = NULL;
////////////////////////////////////////////////////////////////////
//2019-01-23
1. _SCL_SECURE_NO_WARNINGS 전처리를 사용하지 않고 처리하는 방법을 아시는 분은 댓글 잘아주시면 감사하겠습니다. 다른 블로그를 참조 해보니 예외처리를 통해 가능 한 것 같습니다.
2. 같은 형식이 아닌 경우에 대한 copy를 사용하고 싶은데 계속 에러로 처리되서 하던 중간에 우회해서 해결했습니다. 혹시 형식이 다른 복사 방법을 아시는분은 댓글 달아주시면 감사하겠습니다.
ex) vector<float> -> char*로 서로 복사하는 방법이 궁금합니다. 통신 처리시 sizeof()를 편하게 사용하려고 합니다...
'C, C++, C# > Tip' 카테고리의 다른 글
GetPrivateProfileString, GetPrivateProfileInt 오류 (0) | 2021.06.01 |
---|---|
GetPrivateProfileString, GetPrivateProfileInt 주의사항 (0) | 2021.05.18 |
Visual Studio 전처리 (0) | 2019.01.23 |
boost 컴파일 에러 fatal error C1001 (2) | 2017.04.20 |
c++ system("PAUSE") 계속하려면 아무 키나 누르십시오 . . . (3) | 2017.03.16 |