여기에서 많은 주제를 검색했지만 정확하게 대답하지 않은 것 같습니다.배열의 내용을 C++의 크기가 조정 된 배열에 복사
C++에서 동적 재 할당 배열을 수행하려고합니다. STL (vector, ...)이 명시 적으로 금지되어있는 숙제에서 이것을 사용해야 할 때 STL 라이브러리의 어떤 것도 사용할 수 없습니다.
int * items = new int[3]; //my original array I'm about to resize
int * temp = new int[10];
for (int i = 0; i < 3; i++) temp[i] = items[i];
delete [] items; //is this necessary to delete?
items = new int [10];
for (int i = 0; i < 10; i++) items[i] = temp[i];
delete [] temp;
이 작동하는 것,하지만 날 귀찮게하는 것은 반복의 과도한 번호 :
는 지금까지, 나는 다음과 같은 코드로 정교하게 시도했습니다. 아무리 똑똑해도 끝날 수 없습니까? 분명히, 나는 이것보다 훨씬 더 큰 배열로 작업하고있다. 불행하게도, 은 배열을 사용하여해야합니다.
편집 : 내가 items = temp;
대신
for (int i = 0; i < 10; i++) items[i] = temp[i];
을하고 std::cout
내 모든 요소를하려고 할 때, 나는 처음 두 요소를 잃는 결국,하지만 제대로 Valgrind의 인쇄를.
숙제를 할 때, 더 똑똑한 것은 그것을 캡슐화하는 것입니다. 즉, std :: vector의 부분을 다시 작성해야합니다. "stl"의 정의에 따라 다음을 사용할 수 있습니다. std :: copy와 같은 것들이 복사 과정을 캡슐화합니다. – PlasmaHH
포인터가 일반 변수이므로 다시 할당 할 수 있습니다 ... –
C++을 만진 이후로 잠시 동안, [] []을 temp []로 복사 한 다음 temp [] abck에서 items []로 복사해야합니까? items [] -'int * temp = items; '에 대한 새로운 포인터를 만들 수는 없습니까? item - new int [10]'. 'temp'에서'items'까지 복사본을 만드십시오 - 아마 memcopy' 함수 나'std :: copy' 함수를보십시오. 그런 다음 'temp'를 삭제하십시오. – wmorrison365