STL: Перегрузка разыменования и взятия адреса. Итераторы: сущность и классификация


Перегрузка оператора - один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются.

struct Complex {  
   Complex( double r, double i ) : re(r), im(i) {}  
   Complex operator+( Complex &other );  
   void Display( ) {   cout << re << ", " << im << endl; }  
private:  
   double re, im;  
};  

// Перегрузка оператора сложения  
Complex Complex::operator+( Complex &other ) {  
   return Complex( re + other.re, im + other.im );  
}

Взятие адреса переменной осуществляется унарным оператором &: &temp - вернёт адрес переменной temp Чтобы получить значение, записанное в некоторой области, на которое ссылается указатель нужно воспользоваться операцией разыменования указателя : `temp - вернёт значение по адресу temp`

Итератор - средство доступа к содержимому отдельных объектов в контейнере.

Классификация итераторов:

  • Входной итератор (op++, op+, op->, op=, op==, op!=) - используется для перебора (только чтение) элементов только с начала в конец. Самый простой пример использования итератора ввода — вывести на экран элементы массива.
  • Выходной итератор (op++, op+) - доступ в одном направлении (с конца в начало) для записи. Разыменовывать такие итераторы нужно только для того, чтобы присвоить некое значение объекту, на который итератор ссылается.
  • Однонаправленный (op++, op+, op->, op=, op==, op!=) - объединяет итераторы входа и выхода, осуществляет чтение и запись в одном направлении.
  • Двунаправленный (op++, op--, op->, op=, op==, op!=) - то же, что и однонаправленный итератор, позволяющий осуществлять перебор в обе стороны.
  • Произвольного доступа (op++, op--, op->, op=, op==, op!=, op+=, op-=, op<, op>, op[]) - даёт доступ к любому элементу контейнера.

results matching ""

    No results matching ""