日期:2014-05-18  浏览次数:20876 次

关于 结构体数组 的问题
struct s{..}

s[] S=new s[16];

//..赋值

现在,我想删掉第8个元素,并将其后面元素依次移动过来。

我想到的办法是:

for(int i=7;i<15;++i)
{
  S[i]=S[i+1];
}

请问该方法可行否,有没更高效方法?

------解决方案--------------------
可以。
如果使用数组似乎已经效率够高了。其他方法本质上应该也是这样移动的。

另外,可以考虑使用 List<s> S = new List<s>();
------解决方案--------------------
链表,在插入和删除时比数组快,因为它不用移动元素。。。不过链表没有数组的随机访问快速……

你写的可以,不过最好另外设个变量,记录总元素个数。
比如你这段程序执行前,int size=16;
删除操作执行后size--;,元素个数减1,,不然删除之后S[15]这个最后的元素无法确定是否还有效……


如果想要更高效的办法就用Array.Copy(.NET内部用不安全代码直接复制内存空间),比如你写的这段程序可以用下面这个语句代替
C# code
Array.Copy(S, 8, S, 7, 8);