0

我有一个数组,它的大小和值在执行过程中一直在变化。我想以尽可能小的性能开销来做到这一点。

相反,改变数组大小我只是有成员 int 变量指示开始和结束索引,我希望这个数组的使用者在 foror 循环中使用这些索引。风险是,如果消费者不使用 start 和 endindex 可能最终导致错误。有没有更好的方法来做到这一点?

所以我所拥有的是:

MyClass
{

public:
BusinessClass                   myArray[MAX_COUNT];//the array

int StartIndex; //start index
int EndIndex;   //End index

Logic()
{
//modified the array and changes start and end index
}

}

MyConsumer
{

MyClass obj;

public:
void ReadArray()
{
for (int i = obj.StartIndex ; i <obj.EndIndex; i++)
{
//perform logic
}
}

}
4

1 回答 1

1

除了暴露底层数组之外,您还可以有一个length返回 的方法EndIndex-StartIndex和一个数组运算符,该运算符从数组中返回一个项目,该项目的偏移量为StartIndex.

您将像这样访问数组中的项目:

for (int i = 0; i < obj.length(); i++) {
  BusinessClass &item = obj[i];
}

MyClass类看起来像这样:

class MyClass {
public:
  size_t length() const {
    return EndIndex - StartIndex;
  };
  BusinessClass &operator[](size_t off) {
    return myArray[StartIndex+off];
  };

private:
  BusinessClass myArray[MAX_COUNT];

  int StartIndex; //start index
  int EndIndex;   //End index
};
于 2013-07-30T21:57:34.360 回答