Arrays 我可以使用指针一次指向数组的多个部分吗?

Arrays 我可以使用指针一次指向数组的多个部分吗?,arrays,pointers,fortran,Arrays,Pointers,Fortran,在我所做的工作中,我声明了一个长度为N的数组 在我编写代码的过程中,某些元素之间的数据需要删除 如果我的初始数组是[1,2,3,4,5],我想把它改为[1,2,4,5]。但我不会只做一次。这个过程将涉及删除每个元素,直到没有元素留下,我可以一次取出多个元素。我之所以这样做,是因为我正在尝试重现一个复杂的过程,我认为现在没有必要深入研究这个问题 我希望能够定义一个数组 a = (/ 1, 2, 3, 4, 5 /) 如果我决定删除元素3和4,我可以设置一个指针(称为p),这样它就可以指向a,如下

在我所做的工作中,我声明了一个长度为N的数组

在我编写代码的过程中,某些元素之间的数据需要删除

如果我的初始数组是[1,2,3,4,5],我想把它改为[1,2,4,5]。但我不会只做一次。这个过程将涉及删除每个元素,直到没有元素留下,我可以一次取出多个元素。我之所以这样做,是因为我正在尝试重现一个复杂的过程,我认为现在没有必要深入研究这个问题

我希望能够定义一个数组

a = (/ 1, 2, 3, 4, 5 /)
如果我决定删除元素3和4,我可以设置一个指针(称为p),这样它就可以指向a,如下所示:

具体来说,p的长度等于a减去删除的元素数。我想今天早上做一次。重新定义

首先,我删除元素4和5并指向它

p = (/ 1, 2, 3, 6, 7, 8, 9, 10 /)
然后后来去掉了7,8,9我可以指一个

同时保持一个完整的。在我的脑海中,上面的p是通过在一个紧凑的指针中同时指向a的前三个元素,然后是第六个元素,然后是第十个元素来创建的


我知道我可能可以使用可分配数组获得相同的结果,但我认为指针非常有用。

否。数组指针可以与任何数组节关联,但不能与任意元素关联


根据以后要执行的操作,可以使用第二个数组列出
a
中的当前索引,然后对某些操作使用向量下标。但使用向量下标数组的位置存在限制(例如,如果与伪参数关联,则无法重新定义它),在某些情况下,向量下标数组的底层实现可能只是创建相关元素的临时连续副本。

否。数组指针可以与任何数组节关联,但不能与任意元素关联


根据以后要执行的操作,可以使用第二个数组列出
a
中的当前索引,然后对某些操作使用向量下标。但使用向量下标数组的位置存在限制(例如,如果与伪参数关联,则无法重新定义它),在某些情况下,向量下标数组的底层实现可能只是创建相关元素的临时连续副本。

我通常使用可分配(数据)数组以及另一个作为数据数组掩码的逻辑数组来实现它。然后使用掩码跟踪数组中哪些元素“正在使用”或“未使用”。当需要时,活动或“正在使用”元素可以打包到最终或中间数组中,如果是中间数组,则逻辑数组将重置为新数据数组的大小

我通常避免使用指针


打包和求和(逻辑数组)在这里可能很有用。

我通常使用一个可分配(数据)数组,以及另一个作为数据数组掩码的逻辑数组来处理它。然后使用掩码跟踪数组中哪些元素“正在使用”或“未使用”。当需要时,活动或“正在使用”元素可以打包到最终或中间数组中,如果是中间数组,则逻辑数组将重置为新数据数组的大小

我通常避免使用指针


打包和求和(逻辑阵列)在这里可能很有用。

这取决于对阵列中任意位置的访问速度是否比擦除元素的速度更重要。 如果删除元素是您的优先事项,那么您肯定应该创建一个链表结构,在该结构中您可以一次删除n个元素。
另一方面,如果您需要的是对数据的访问速度,则应使用数组。

这取决于对数组中任意位置的访问速度是否比擦除元素的速度更重要。 如果删除元素是您的优先事项,那么您肯定应该创建一个链表结构,在该结构中您可以一次删除n个元素。 另一方面,如果您需要的是对数据的访问速度,则应使用阵列

a = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 /)
p = (/ 1, 2, 3, 6, 7, 8, 9, 10 /)
p = (/ 1, 2, 3, 6, 10 /)