class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

STL

основы

введение
Инструментарий
Проекты в C++
Комментарий
Утверждения
Идентификаторы
Область видимости
Литералы
Типы данных, переменные
Константы, перечисления
Выражения и операции
Агрегатные типы
Указатели
Ссылки
Массивы
Строки
Управляющие операторы
Функции
Аргументы функции

ООП

Терминология
Определение классов
Константные методы
Статические члены
Наследование
Инкапсуляция
Полиморфизм
Инициализация и уничтожение объектов
this

прочее

шаблоны
макросы
динамическая память
исключения
rtti

Справочник по C++

Массивы

Массив - множество объектов одного типа расположенных в памяти последовательно. Индексация - операция доступа к элементу массива. Элементы нумеруются от 0.

Внутренне массивы реализованы как указатели на 0 элемент. Различие между ними проявляется в операторе sizeof, который для массива возвращает размер всего массива. Размер массива может указываться только константным выражением.

#include <iostream>
using namespace std;

// массивы по 10 элементов типа int
int array1[10]; // не инициализированный массив         

// инициализированный массив 
//(заданы значения каждого элемента)
int array2[]=   
    {1,2,3,4,5,6,7,8,9,0};

// объявления двухмерных массивов
int array3[5][6]; 
int array4[2][3]={  {0,1,2}, {2,1,0}  };

// строки в С завершаются 0, более подробно см. строки
char* str1="Hello, world";  // указатель на строку "Hello, world"
char str2[]="Hello, world"; // массив символов
char str3[]={'H','e','l','l','o',',',' ','w','o','r','l','d','0' };

int * iptrarray[10];  // массив указателей типа int 
int (*iarrayptr)[10]; // указатель на массив из 10 элементов типа int

int main()
{
int* iptr;
cout<<"sizeof(iptr)="  <<sizeof(iptr)  <<endl;
cout<<"sizeof(array1)="<<sizeof(array1)<<endl;
cout<<"array2[11]="<<array2[11]<<endl;
return 0;
}

динамический массив

Как видно из примера, С++ поддерживает только статические массивы (с неизменяемым числом элементов) и не содержит встроенных механизмов проверки выхода за границы массива. Эти проблемы легко решаются созданием собственного класса массива. Ниже приведен пример использования класса vector из STL.

#include <iostream>
#include <vector>
using namespace std;

vector<int> darray;

int main(){

// добавить в массив 10 элементов со значением 3
darray.insert(darray.begin(),10,3);            
// вывести число эл. в массиве
cout<<"size of darray="<<darray.size()<<endl;  

// вывести элементы массива
// для проверки выхода за границу массива нужно
// пользоваться методом at (вызывает исключение), 
// а не операцией индексацией
cout<<"1. elements of darray: ";
for(unsigned int i=0;i<darray.size();i++)
	 cout<<darray[i]<<" ";
cout<<endl;

// в методе at в отличие от операции []
// происходит исключение при выходе за границы массива
darray.at(4)=10; // меняем 4 эл.
darray.at(5)=11; // меняем 5 эл.
cout<<"2. elements of darray: ";
for(unsigned int i=0;i<darray.size();i++)
	 cout<<darray[i]<<" ";
cout<<endl;

//удаляем с 0 по 4 элемент
darray.erase(darray.begin(),darray.begin()+4);
cout<<"3. elements of darray: ";
for(unsigned int i=0;i<darray.size();i++)
	 cout<<darray[i]<<" ";
cout<<endl;

// удалить все элементы, и вывести число эл. для проверки
darray.clear();
cout<<"size of darray="<<darray.size()<<endl;  

// добавить вконец один элемент со значение 45
darray.push_back(45);
cout<<"darray[0]="<<darray[0]<<endl;

return 0;
}

алгоритмы

Большинство стандартных задач в которых задействованы массивы как копирование уже реализованы в STL.

 #include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void outint(int i) {
	cout<<i<<',';
}

int main() {
int sarray[10];                     // статический массив
std::vector<int> darray;            // динамический массив
darray.insert(darray.begin(),10,3); // вставляем 10 эл.

// заполняем статический массив значением 4
fill(sarray,sarray+10,4); 

// копируем 5 эл. из статического во вторую
// половину динамического массива
copy(sarray,sarray+5,darray.begin()+5); 
darray[6]=20;

cout<<"darray: ";	
// применяем для каждого элемента функцию outint()
// в данном случае выводим элементы массива
for_each(darray.begin(),darray.end(),outint);
cout<<endl;

// подсчитываем число элементов равных 4
cout<<"darray have "<<count(darray.begin(),darray.end(),4)
<<" el. which equal to 4"<<endl;

// выводим максимальный элемент
cout<<"max element is "<<*(max_element(darray.begin(),darray.end()))<<endl;

// сортируем массив 
sort(darray.begin(),darray.end());

// выводим отсортированный массив
cout<<"sorted darray: ";
for_each(darray.begin(),darray.end(),outint);
cout<<endl;
}

массивы в boost

По аналогии с шаблонами классов STL в Boost определен класс-обертка для обычных статических массивов.

#include <boost/array.hpp>
#include <iostream>
#include <algorithm>
using namespace std;
using namespace boost;

int main() {
// объявление двух статических массивов по 10 эл.	
array<int,10> myarray1; //
array<int,10> myarray2; //

// заполняем первый массив значением 5
fill(myarray1.begin(),myarray1.end(),5);

// заполняем второй массив значением 6
fill(myarray2.begin(),myarray2.end(),6);

// вместо алгоритма copy
// воспользуемся перегруженным оператором = 
myarray2=myarray1; 

// вывод элементов myarray2
// как и в STL метод at возбуждает исключение 
// при выходе за границы массива, а операция [] нет
cout<<"myarray: ";
for(unsigned int i=0;i<myarray2.size();i++)
	cout<<myarray2[i]<<" ";
cout<<endl;
}

Рейтинг@Mail.ru