본문 바로가기

C, C++, C#/Tip

copy stl vector<->array 형변환 정리

반응형

안녕하세요. 오늘은 stl vector와 array의 복사에 대해 정리를 하려고 합니다.

 

점점 개발을 하면서 형식이 다른 정보를 넘겨줄 때가 헷갈릴때가 많이 생기네요

 

오늘 정리 내용은 그 중에서 가장 많이 사용하는 stl에 대한 복사 입니다.

 

copy에 대한 내용을 점점 추가 할 예정이기 때문에 소스코드는 가장 하단에 첨부 했습니다.

 

여기서 주의 할 점은 stl에서 제공하는 copy 사용 시 Visaul Studio 버전에 따라 동적할당(new)해서 처리되는 copy를 오류로 처리됩니다. 오류 발생시 Visual Studio 전처리 1번 항목을 수행해주시기 발랍니다.(링크)

 

아래 소스코드를 보시면 쉽게 확인할 수 있습니다.

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

//2021-02-15 오타 수정
	#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()를 편하게 사용하려고 합니다...

반응형