У меня есть массив, размер и значения которого постоянно меняются во время выполнения.
Я хочу сделать это с минимальными потерями производительности.
Вместо изменения размера массива у меня просто есть переменные-члены int, указывающие начальный и конечный индексы, и я ожидаю, что потребитель этого массива будет использовать эти индексы в цикле foor. Риск заключается в том, что если потребитель не использует начало и конечный индекс, это может привести к ошибке. Есть ли лучший способ сделать это?
Итак, что у меня есть:
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
}
}
}
Вместо того, чтобы выставлять основной массив, вы могли бы иметь length
метод, который возвращает EndIndex-StartIndex
и оператор массива, который возвращает элемент из смещения массива на значение StartIndex
,
Вы бы получили доступ к элементам в массиве следующим образом:
for (int i = 0; i < obj.length(); i++) {
BusinessClass &item = obj[i];
}
Мои занятия класс будет выглядеть примерно так:
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
};
Других решений пока нет …