주어진 요소의 배열 지우기 - 페이지 4

 
예... 완벽에는 한계가 없습니다.
 

Mdya ... 프로그래밍의 괴물 ...

개인적으로 가장 이해하기 쉬우면서도 동시에 효율적인 코드인 @Dmitry Fedoseev 와 같은 내용을 작성하고 속도는 거의 동일할 것입니다.

@Nikolai Semko 의 코드는 다소 심각한 변태이지만 필요한 변태라고 생각합니다. 그리고 도로가 매 밀리초일 때 - 적절하고 적합합니다.

 
Georgiy Merts :

Mdya ... 프로그래밍의 괴물 ...

개인적으로 가장 이해하기 쉬우면서도 동시에 효율적인 코드인 @Dmitry Fedoseev 와 같은 내용을 작성하고 속도는 거의 동일할 것입니다.

@Nikolai Semko 의 코드는 다소 심각한 변태이지만 필요한 변태라고 생각합니다. 그리고 도로가 매 밀리초일 때 - 적절하고 적합합니다.

이 두 경우 모두 동일한 요소를 여러 번 드래그하는 것이 마음에 들지 않습니다. 이는 대부분의 경우 가장 느린 팝업 거품 방식으로 정렬하는 것과 유사한 느낌을 줍니다. SUDB에서 수행되는 작업을 수행하는 것이 더 쉽고 명확하며 신뢰할 수 있습니다. 요소가 삭제 표시되고(동시에 몇 개의 표시가 있는지 계산) 표시되지 않은 모든 요소(한 번)는 다음을 사용하여 새 복사본으로 전송됩니다. 배열 요소의 나머지 수입니다. 메모리의 관점에서 이것은 플래그 배열("삭제 표시")을 위한 추가 공간만 차지하며, 원래 배열과 함께 배열의 두 번째 축소 복사본에는 현재보다 더 많은 메모리가 필요하지 않습니다. 하나의 ArrayResize에 필요합니다. 하나의 값이 삭제되지 않고 배열이 삭제되면 표시 속도를 높일 수도 있으므로 항상 모든 값을 실행하지 않도록 할 수 있습니다. 이렇게 하려면 최대값과 최소값을 정의하고(문자열에도 가능) 표시 없이 최소값보다 작거나 최대값보다 큰 요소를 건너뜁니다.

 
Dmitry Fedoseev :

최근에 이 주제에서처럼 주기적으로 웅덩이에 앉아 있었습니다.)

블라디미르 파투샤크 :

당신의 구현을 보여

마케터가 이미 최적이라고 생각하는 옵션을 작성했습니다. 주기의 크기를 빼야 한다는 점 외에는 복제할 의미가 없습니다.
 
Dmitry Fedoseev :

그게 낫다:

최선의 선택은 속도 측정을 통해 확인해야 합니다.
 
TheXpert :

최근에 이 주제에서처럼 주기적으로 웅덩이에 앉아 있었습니다.)

마케터가 이미 최적이라고 생각하는 옵션을 작성했지만

글쎄요, 그는 박사 학위 논문을 낙방했습니다 ...

 
Vladimir :

이 두 경우 모두 동일한 요소를 여러 번 드래그하는 것이 마음에 들지 않습니다.

두 경우 모두 각 요소는 최대 한 번만 드래그됩니다.
 
TheXpert :
하나는 42개, 다른 하나는 6개, 세 번째는 30개. 이런 질문과 답변에 도대체 어떤 내용이 들어있을지 상상이 안 갑니다.

"전문가"는 아름답습니다! 매력 을 발산하며 관객들을 사로잡다 Marketa :-)) 나는 전문가는 아니지만 개인적으로 Dmitry Fedoseev에 대해 강력하게 동의하지 않습니다 ...

 
Denis Kirichenko :

그러나 개인적으로 나는 Dmitry Fedoseev에 대해 강력하게 동의하지 않습니다 ...

나는 부과하지 않습니다.

 
글쎄, 순전히 당면한 작업에. 값을 제거하고 비우십시오.
 template < typename T>
int arrayFilter(T &data[], const T value)
{
     int s, d = s = ArraySize (data);
     
     for ( int i=d- 1 ; i>= 0 ; i--)
          if (data[i] == value || data[i] == NULL )
          {
               s--;
               for ( int j=i; j<s; j++)
                    data[j]=data[j+ 1 ];
          }
  
     if (d > s)
           ArrayResize (data, s);
     
     return s;
}

void OnStart ()
{
     long array[] = { 1 , 2 , 3 , 6 , 9 , 5 , 6 , 3 , 25 , ,, 6 , 8 , NULL , 7 , NULL , 4 };
     Print ( arrayFilter< long >(array, 3 ) );
}