CPLEX 및 C++에서 Concert Technology를 통해 작업하고 있으며 발생하는 반복되는 문제는 내부적으로 IloArray
구조가 오버플로되는 것 같습니다 vector
구조 참조 단위 복사 (copy-by-reference) 연산자. 내가 알아야 할 것은 배열 구조를 다루는 아주 청결하고 메모리 효율적인 방법이다.CPLEX IloArray, 쉬운 방법으로 값을 복사 (참조하지 않음)하는 방법
그러나 ...이 의미를 들어, IloIntArray Array_copy = Array
을 그 이전에 선언 Array_copy
에 Array
의 참조 복사본을 만들 것입니다, IloIntArray Array
초기화. 따라서 Array
의 변경 사항은 자동으로 Array_copy
으로 전송됩니다. 동일한 내용이 add()
루틴을 통해 다차원 IloArray
구조에 적용됩니다.
우리가 내가 i = 1
iSize
-Array2D[i]
의 각 위치에 저장 iSize
에 i = 1
에 색인, 루프를 들어, Array
의 값이있는있을 것 안에, 2 차원 IloArray<IloIntArray> Array2D(env)
를 채울 필요가 예를 들어, 가정 해 봅시다 루프의 반복마다 다릅니다. 제작 중 : I-차원이 처음에 크기 iSize
의로 설정 한 Array2D
가정
Array2D[i] = Array
Array2D[i].add(Array)
또는,.
매번 i- 치수의 요소에 대한 참조가 복사되고 마지막 요소와 동일한 모든 요소로 끝나기 때문에 값으로 복사를 수행하지 못합니다. 값
지금, 게다가, 내 자신의 복사하여 값 운영자 생성자 (옵션 I) 또는 을 일상 (옵션 II) 수신, 둘 다 출발지와 목적지를 복사 배열뿐만 아니라 원점 배열을 복사 할 대상 배열 (, 예 : 다차원 배열)의 위치를 지정합니다.
다른 방법으로 값을 복사 할 수 있습니까? 어떤 경우이 옵션 중 어느 것이 더 깔끔하고 메모리가 효율적인지 결정하는 데 도움을 줄 수 있습니까? 직관적으로 나는이보다 효율적으로 할 수 옵션하다고 생각,하지만 난 그것을 할 방법을 모른다 ...
감사를 사전에 도움을 Y
AFAIK, 배열 복사 방법은 다음과 같습니다. 1)'for' 루프. 2)'memcpy' 3) DMA 4) Unrolled (슬롯 당 하나의 할당). 어셈블리 언어를 사용하는 경우 일부 프로세서에는 큰 메모리 블록을 복사하기위한 지침이 있습니다. –
BTW, 포인터 및 참조 중 하나를 사용하면 배열 복사 (예 : 함수 전달)의 실행 비용을 피할 수 있습니다. 포인터 또는 참조를 전달하면 큰 배열보다 공간과 실행 시간이 적게 걸립니다. –
그래서 내가 포인터와 참조의 활용이 더 깔끔하고 메모리 효율적인 방법으로 인도한다고 언급 한 이유입니다. 그래도, 내가하려는 일을하지 못하게하고있다. – Jacko