修改的数组中的最后一个单元格

时间:2013-11-08 16:57:59

标签: arrays

有没有办法找出array中哪个单元格是最后修改过的单元格? (例如改变它的价值) 在任何基于编译的语言中。

例如,假设我们使用array1个单元格定义了n。现在array1[2]的值已更改为1,在array1[7]的值将更改为1之后,我想要一个解决方案,找出7th单元格作为修改的最后一个单元格。

2 个答案:

答案 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);

但是,这两个示例都只适用于程序中的单个数组,这对我来说似乎没什么用处。


我只有其他想法涉及创建一个元组数组(或类似的东西)并使用元组的第二个元素作为以下之一:

  1. 一个bool标志,指示该元素是否是最后一个更改
  2. int标志,指示元素的“年龄”
  3. 但是,这两种方法都需要访问每个数组更新的数组的每个元素。

    对于(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