크기를 조정하기 위해 배열에서 얕은 사본을 수행하는 의미는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/432672

  •  10-07-2019
  •  | 
  •  

문제

깊고 얕은 복사에 대한 나의 이해가 맞다면 내 질문은 불가능합니다. 배열 (A [10])가 있고 얕은 사본 (B [20])을 수행하는 경우 B의 데이터가 인접하지 않기 때문에 불가능하지 않습니까?

내가 이것을 완전히 잘못 이해했다면 누군가 (c#에서) C ++의 배열 크기를 조정하기 위해 재 할당을 수행하는 빠른 방법을 조언 할 수 있습니다.

노트
Im System.array 객체의 .clone () 및 .copy () 멤버를보고 있습니다.

도움이 되었습니까?

해결책

기존 배열 크기를 조정할 수는 없지만 사용할 수 있습니다.

Array.Resize(ref arr, newSize);

이것은 새 배열을 할당하고 이전 배열의 데이터를 새 배열로 복사하고 업데이트합니다. arr 변수 (이 경우 REF로 전달됩니다). 이게 네가 말하는거야?

그러나 누구든지 다른 이전 배열에서 여전히 가리키는 참조는 업데이트되지 않습니다. 더 나은 옵션은 작업하는 것입니다 List<T> -수동으로 크기를 조정할 필요가 없으며 오래된 참조 문제가 없습니다. 방금 Add/Remove 등. 일반적으로 배열을 매우 자주 사용하는 경향이 없습니다. 그들은 그들의 용도를 가지고 있지만 기본 케이스는 아닙니다.


당신의 의견을 다시 말하십시오.

  • 권투: List<T> 상자가 아닙니다. 그것은 제네릭에 대한 요점 중 하나입니다. 후드, List<T> 주변의 포장지입니다 T[], 그래서 a List<int> 있습니다 int[] - 복싱 없음. 나이가 많습니다 ArrayList 주변의 포장지입니다 object[], 하도록 하다 하다 상자; 물론 권투 당신이 가정 할 수있는 것만 큼 나쁘지 않습니다 그래도.
  • 작업 Array.Resize; 내가 기억한다면, 그것은 크기를 찾습니다 T, 그런 다음 사용합니다 Buffer.BlockCopy 내용물을 블리팅합니다 실제 세부 사항은 내부 통화로 숨겨져 있지만 본질적으로 새 배열을 할당 한 후에는 두 배열 사이의 데이터의 블릿 (memcpy)이므로 매우 빠릅니다. 참조 유형의 경우 힙의 객체가 아니라 참조 만 복사합니다. 그러나 정기적으로 크기를 조정하는 경우 List<T> 일반적으로 훨씬 간단 할 것입니다 (기본적으로 재 구현하지 않는 한 더 빠릅니다. List<T> 크기를 최소화하기 위해 용량을 여분의 용량을 제공합니다).
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top