Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Многомерные массивы, как правило, реализованные как одномерные массивы, каждый элемент которых является ссылкой на другой одномерный массив.
Обращение к многомерным массивам происходит по всем его индексам, так например: двумерный массив хорошо представляется как таблица со строками и столбцами. Данные в строках рассматриваются слева направо, в то время как в столбцах - сверху вниз. Для обращения к требуемому элементу двумерного массива необходимо указать номер строки и номер столбца. float *array1; // Одномерный массив int **array2; // Многомерный массив array1 = new float[10]; // выделение 10 блоков размером типа float array2 = new int*[16]; // выделение 16 блоков размером типа указателя на int for(int i = 0; i < 16; i++) array2[i] = new int[8];
В С++ операции new и delete предназначены для динамического распределения памяти компьютера. Операция new выделяет память из области свободной памяти, а операция delete высвобождает выделенную память. Выделяемая память, после её использования должна высвобождаться, поэтому операции new и delete используются парами. Даже если не высвобождать память явно, то она освободится ресурсами ОС по завершению работы программы. Рекомендую все-таки не забывать про операцию delete. // высвобождение памяти отводимой под одномерный динамический массив: delete [] < имя массива>;
// высвобождение памяти отводимой под двумерный динамический массив: for (int count = 0; count < n; count++) delete [] < имя массива> [count]; // где n – количество строк в массиве
Многомерные массивы передаются в функцию как: < тип> < имя массива> [][][][]; // и все его размерности;
Матрицы – смотри про двумерные массивы
Структуры: Структуры - это объединенные данные, у которых есть некоторая логическая взаимосвязь. В отличие от массивов, структуры могут содержать данные разных типов. struct < имя> { //описание полей < тип> < имя> }; Доступ к полям структуры: < имя переменной>.< имя поля> Cтруктуру можно передавать в функцию по значению и по адресу Функцияция может иметь значение: результат типа структуры и может возвращать результат типа структуры Ввод и вывод: Ввод данных типа структуры выполняется поэлементно стандартных типов: cin> > 01.b.x> > 01.b.y; cout< < 01.b.x< < 01.b.y; Можно сделать структуру типа структуры!
Динамическая структура: Struct Prim int main() В итоге получаем структуры из одно элемента, который состоит из поля типа int со значением 1 и указателем на конец структуры, т.е. на ноль. Массив структур: Объявляется структура struct MMM { int S; float F; char Str; } Объявляется массив типа структуры MMM mass[100]; Присваивать по элементам mass[1].S=55; mass[1].F=0.75; mass[1].Str=”This Fucking World”;
Билет Описание строк: Строка в С++ - это массив символов, оканчивающийся нулевым символом ('\0'). Особенности инициализации и хранения строк: А)одновременная инициализация и объявление Char slovo[6]=”tiger”; Или Charslovo[]={‘t’, ’I’, ’g’, ’e’, ’r’, ’\0’); Если одновременно происходят инициализация и объявление, то указывать размер не обязательно. Б) вручную For (int n=0; n< 6; n++) Cin> > Slovo[n]; Строка есть не что иное, как набор символов, и, соответственно, для хранения строк можно использовать символьные массивы. Например, строка " QWERTY" имет тип char[7] Доступ к элементу строки (символу) осуществляется также как и доступ к элементу массива Основные функции для обработки строк в С++ string.h - это библиотека обработки строк 1)Функция int strlen (const char* s); - определяет длину строки s. Возвращает количество символов, предшествующих завершающему нулевому символу 2) Функция char *strcpy(char *s1, const char *s2); - копирует строку s2 в массив символов s1. Возвращает значение s1 3)Функция int *strcmp(const char *s1, const char *s2); - сравнивает строки s1 и s2 (по ASCII-кодам). Функция возвращает значение 0, если строки s1 и s2 равны, значение меньше ноля, если строка s1 меньше s2, и значение больше ноля, если s1 больше s2. 4) Функция char *strcat(char *s1, const char *s2); - добавляет строку s2 к строке s1. Первый символ строки s2 записывается поверх ноль-символа строки s1. Возвращает s1. 5)Функция char *strncpy(char *s1, const char *s2, int n); - копирует не болеее n символов строки s2 в массив символов s1. Возвращает s1. 6)Функция char *strncmp(char *s1, const char *s2, int n); - сравнивает до n символов строки s1 со строкой s2. Возвращает 0, меньше, чем 0 или больше, чем 0, если s1 соответственно равн, меньше или больше s2. 7)Функция char *strncat(char *s1, const char *s2, int n); - присоединяет первые n символов строки s2 в строку s1. Возвращает s1. 8)Функция char *strchr(const char *s, int c); - проверяет строку s на содержание символа хранящегося в c. Результатом функции является адрес первого вхождения символа c в строку s. Если символ не найден, возващается NULL. 9)Функция char *strstr(const char *s1, const char *s2); - проверяет строку s1 на содержание подстроки s2. Результатом функции является адрес первого вхождения подстроки s2 в строку s1. Если подстрока не найдена, возващается NULL. 10)Функция char *strlwr(char *s); - конвертирует строку к нижнему регистру (т.е. переводит строку в строчные символы). 11) Функция char *strupr(char *s); - конвертирует строку к верхнему регистру 12) Функция char *strset(char *s, int ch); - заменяет ВСЕ символы в строке s на символ ch. 13)Функция char *strnset(char *s, int ch, int n); - заменяет первые n символов в строке s на символ ch. 14) Функция char *strrev(char *s); - меняет порядок следования символов в строке на противоположный (меняет первый символ с последним, второй символ с предпоследним и т.д.).
Ввод/вывод: в символьный массив можно ввести сразу всю строку, используя оператор ввода cin > > Имя_массива; и, аналогичным образом, вывести сразу всю строку на экран, используя оператор вывода cout < < Имя_массива; Связь строки и указателя: 2)использование указателя на символ #include< iostream.h> void main() { char str[] = " Здравствуй, мир! "; // объявляем символьный массив char *b; // объявляем указатель на символ b = & str[12]; // теперь b указывает на 12-ый символ str *b = 'M'; // присваиваем первому элементу b символ 'М' cout < < b; // выводим строку b на экран (Мир!) } Преобразование символьной информации в числовую: atof Преобразует символьную строку в значение типа float atoi Преобразует символьную строку в значение типа int atol Преобразует символьную строку в значение типа long int strtod Преобразует символьную строку в значение типа double strtol Преобразует символьную строку в значение типа long int Также для преобразования в строковый формат можно использовать прибавление символа “0” Для обратного преобразования можно отнять “0”, либо аналогично использовать функции: char *itoa(int value, char *string, int radix); char *ltoa(long value, char *string, int radix); char *ultoa(unsigned long value, char*string, int radix); Передача символьной строки в функцию подобна передаче любого массива в качестве параметра. Внутри функции вам нужно просто указать тип массива (char) и левую и правую скобки массива. Вам не надо указывать размер строки. Например, следующая программа SHOW_STR.CPP использует функцию show_string для вывода символьной строки на экран: #include < iostream.h> void show_string(char string[]) { cout < < string < < endl; } void main(void) { show_string(" Привет, C++! "); show_string(" Учусь программировать на C++"); } Как видите, функция show_string трактует параметр символьной строки как массив: void show_string(char string[])
|