Лучшее решение дает класс vec
void f() { vector v(10); // диапазон [0:9]
// как будто v в диапазоне [1:10]:
for (int i = 1; i<=10; i++) { v[i-1] = ... // не забыть пересчитать индекс
} // ... }
Лучшее решение дает класс vec c произвольными границами индекса:
class vec : public vector { int lb; public: vec(int low, int high) : vector(high-low+1) { lb=low; }
int& operator[](int i) { return vector::operator[](i-lb); }
int low() { return lb; } int high() { return lb+size() - 1; } };
Класс vec можно использовать без дополнительных операций, необходимых в первом примере:
void g() { vec v(1,10); // диапазон [1:10]
for (int i = 1; i<=10; i++) { v[i] = ...
} // ... }
Очевидно, вариант с классом vec нагляднее и безопаснее.
Интерфейсные классы имеют и другие важные области применения, например, интерфейс между программами на С++ и программами на другом языке (§12.1.4) или интерфейс с особыми библиотеками С++.
Содержание Назад Вперед