清除一个定义元素的数组 - 页 4

 
是的...完善是没有限制的。
 

是啊...编程的怪兽...

我个人会写和@Dmitry Fedoseev 差不多的,最容易理解同时也是最高效的代码,分别是速度会差不多。

我认为@Nikolai Semko 的代码是相当严重的变态行为,但我认为它应该是有用的。而且我认为这是正确和好的,如果每一毫秒都是重要的。

 
Georgiy Merts:

是啊...编程的怪兽...

我个人会写和@Dmitry Fedoseev 差不多的,最容易理解同时也是最高效的代码,分别是速度会差不多。

我认为@Nikolai Semko 的代码是相当严重的变态行为,但我认为它应该是有用的。而且我认为这是正确和好的,如果每一毫秒都是重要的。

我不喜欢在这两种情况下,对同一个项目进行多次拖放。这感觉类似于泡沫排序,在绝大多数情况下,泡沫排序是最慢的。按照DMS中的做法更简单、更清晰、更可靠:元素被标记为删除(同时计算有多少被标记),然后任何未被标记的(一次)被移到一个有剩余数组元素数量的新副本。在内存方面,这将另外只占用标志数组("标记为删除")的空间,第二个缩短的数组副本,加上原来的数组,所需要的内存不会超过一次ArrayResize所需要的。如果被删除的不是一个单一的值,而是一个数组,也可以加快标记的速度,这样你就不必总是跑遍所有的值。要做到这一点,要在其中定义一个最大值和最小值(对于字符串来说,这也是可行的),并跳过小于min或大于max的元素,不做任何标记。

 
Dmitry Fedoseev:

你最近一直在陷入泥潭,就像在这个主题中一样 )

弗拉基米尔-帕斯图沙克

展示你的变体实现

Marketeer已经写了变体,我认为这是最优的,我看不出有重复的意义,只是周期的大小拿不出来。
 
Dmitry Fedoseev:

那就更好了。

最好的选择,速度测量应该证实这一点。
 
TheXpert:

你最近一直在钻牛角尖,就像在这个主题里一样)。

Marketeer已经写了一个我认为是最佳的方案,我认为没有必要再重复它了

哦,你的博士论文一直没有通过......

 
Vladimir:

我不喜欢在这两种情况下,对同一元素进行多次拖放。

在这两种情况下,每个元素最多只能被拖动一次。
 
TheXpert:
一个有42种产品,另一个有6种,第三个有30种。我不敢想象这样的问题和答案,里面有一个怎样的混蛋

这位 "专家 "很不错!他通过揭露 市场的魅力,点燃了观众的热情 :-))我可能不是专家,但我个人坚决不同意德米特里-费多谢耶夫...

 
Denis Kirichenko:

但就我个人而言,我坚决不同意德米特里-费多谢耶夫的观点......

不强求。

 
纯粹是为了手头的任务。删除值和空
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) );
}