有没有办法找出array
最后一个被修改的单元格中的哪个单元格?(例如更改其值) 在任何基于编译的语言中。
例如假设我们array1
用n
单元格定义。现在将值array1[2]
更改为 1,在该值array1[7]
更改为 1 之后,我想要一个解决方案来找出7th
最后一个修改的单元格。
有没有办法找出array
最后一个被修改的单元格中的哪个单元格?(例如更改其值) 在任何基于编译的语言中。
例如假设我们array1
用n
单元格定义。现在将值array1[2]
更改为 1,在该值array1[7]
更改为 1 之后,我想要一个解决方案来找出7th
最后一个修改的单元格。
这些似乎都不是特别好的解决方案,但它们都可以在 C++ 中完成你想要的:
int indexToChange, lastIndexChanged;
int array1 [10];
indexToChange = 2;
array1[indexToChange] = 1;
lastIndexChanged = indexToChange;
indexToChange = 7;
array1[indexToChange] = 1;
lastIndexChanged = indexToChange;
然后在任何时候 array1[lastIndexChanged] 将是最近更新的。但这很烦人,因为每次数组更新都需要 3 个命令。相反,您可以将其包装成一个函数:
void changeArray(int array[], int length, int indexToChange, int newVal){
array[indexToChange] = newVal;
lastIndexChanged=indexToChange;
}
这将要求您的所有数组更新看起来像这样(假设lastIndexChanged
已全局声明并且array1
大小为 10):
changeArray(array1, 10, 2, 1);
changeArray(array1, 10, 7, 1);
然后,要将最近更改的元素更新为 0:
changeArray(array1, 10, lastIndexChanged, 0);
但是,这两个示例都只适用于程序中的单个数组,这对我来说似乎不是特别有用。
我唯一的其他想法涉及创建一个元组数组(或类似的东西)并将元组的第二个元素用作以下之一:
bool
指示元素是否是最后一个更改的标志int
指示元素“年龄”的标志但是,这两种方法都需要在每次数组更新时访问数组的每个元素。
对于 (1),每次更新时,您都必须确保找到上次更新的元素并将其标志设置为,false
因为您将要更新的元素的标志设置为true
。
对于 (2),每次数组更新时,您都会增加每个元素的“年龄”标志,但将更新的元素的“年龄”设置为0
. 这样做的好处是您还可以找到第 n 个最后更新的元素。
在任何一种情况下,如果您的原始数组是一个整数数组,您可以使用具有两行的二维数组来实现这一点。因此,如果array1
大小为 n,您将拥有int array1[2][n]
一个这样的数组(对于 n=4,假设所有单元格都初始化为 0):
[0][0][0][0]
[0][0][0][0]
您将在其中使用顶行作为值,将底行用于标志。因此,数组更新看起来像这样:
对于“bool”标志(仅使用 0 和 1 来模拟 bool 值):
array1[0][2] = 1; //set value of element 2 to 1
array1[1][getLastUpdated()]=false; //resetting the previous "last updated" flag
array1[1][2] = true;
对于“年龄”标志:
array1[0][2] = 1; //set value of element 2 to 1
for (int i=0; i<array1Length; i++){
array1[1][i]++; //increment ages of every element
}
array1[1][2] = 0; //reset age of the element you just updated
然后,要查找最近更新的元素,您将分别搜索array[1][n]
totrue
或0
。
只是不要直接访问数组,在函数/方法中写入它并跟踪它的变化。C#
有一些属性/索引器可以为您将调用包装在X = 2
一个方法中。