На этом шаге мы рассмотрим пример использования обычного массива.
Обычные массивы могут использоваться как контейнеры STL. Однако обычный массив не является классом, поэтому он не содержит функций begin() и end() и для него невозможно определять функции. В таких случаях приходится использовать либо пассивный подход, либо интерфейсные классы.
Вариант с пассивным подходом реализуется просто. Вам понадобятся лишь объекты, обеспечивающие перебор элементов массива через интерфейс итераторов STL. И такие итераторы уже существуют - это обычные указатели. При проектировании STL было решено использовать для итераторов интерфейс указателей, потому что в этом случае обычные указатели превращаются в итераторы. Здесь в очередной раз проявляется общая концепция чистой абстракции: любой объект, который ведет себя как итератор, является итератором. Пример использования обычного массива как контейнера STL:
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <iterator> #include <algorithm> #include <functional> #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } int main(int argc, char* argv[]) { int coll[] = { 5, 6, 2, 4, 1, 3 }; // Возведение элементов в квадрат transform (coll, coll+6, // Первый источник coll, // Второй источник coll, // Приемник multiplies<int>()); // Операция // Сортировка выполняется, начиная со второго элемента sort (coll+1,coll+6); // Вывод всех элементов cout << ToRus("Квадраты чисел:\n"); copy (coll,coll+6, ostream_iterator<int>(cout," ")); cout << endl; getch(); return 0; } //---------------------------------------------------------------------------
Будьте внимательны и правильно передайте конец массива, как это сделано в нашем примере (coll+6). Как обычно, конец интервала находится в позиции за последним элементом.
Результат выполнения программы выглядит так:
Рис.1. Результат работы приложения
На следующем шаге мы рассмотрим интерфейсный класс для массива.