有没有办法找出array
中哪个单元格是最后修改过的单元格? (例如改变它的价值)
在任何基于编译的语言中。
例如,假设我们使用array1
个单元格定义了n
。现在array1[2]
的值已更改为1,在array1[7]
的值将更改为1之后,我想要一个解决方案,找出7th
单元格作为修改的最后一个单元格。
答案 0 :(得分:0)
不要直接访问数组,在函数/方法中写入数据,并在更改时跟踪。在C#
中,有一些属性/索引器将调用X = 2
包装在一个方法中。
答案 1 :(得分:0)
这些都不是特别好的解决方案,但它们都能在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
,同时将要更新的元素的标志设置为{{1} }。
对于(2),对于每个数组更新,您将增加每个元素的“age”标志,但将您更新的元素的“age”设置为true
。这样做的好处是,您还可以找到第n个最后更新的元素。
在任何一种情况下,如果您的原始数组是一个int数组,您可以使用一个包含两行的二维数组来实现它。因此,如果0
的大小为n,那么您将拥有array1
,为您提供一个这样的数组(对于n = 4,假设所有单元格都初始化为0):
int array1[2][n]
您可以在其中使用行的顶行和标记的底行。因此,数组更新看起来像这样:
对于“bool”标志(仅使用0和1来模拟bool值):
[0][0][0][0]
[0][0][0][0]
对于“年龄”标志:
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]
或true
。