Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Листинг 3.3. Многомерные массивы




 

#include <iostream>

 

using namespace std;

 

int main (void)

{

const int dasize = 3;

double darray2d[dasize][dasize] = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } };

for (int i = 0; i < dasize; i++)

{

for (int j = 0; j < dasize; j++)

cout << darray2d[i][j] << " ";

cout << endl;

}

const int fasize = 10;

float farray4d[fasize][fasize][fasize] = {};

return 0;

}

 

3.2.2. Динамические массивы

В том случае, если количество элементов массива неизвестно заранее, можно воспользоваться одним из двух способов. Первый заключается в том, чтобы заранее выделить в стековом фрейме достаточное количество памяти, указав такую размерность, которая, как ожидается, не будет превышена. Однако мало того, что такой подход крайне неэффективен в аспекте занимаемой программой памяти, так еще все же может быть превышена указанная размерность. При втором подходе, память для элементов массива выделяется динамически, а доступ к ней производится через указатель. Важным аспектом здесь является тот факт, что доступ к обычному массиву происходит по указателю на его первый элемент, а адрес некоторого элемента массива представляет собой число, равное сумме адреса начального элемента и произведения индекса требуемого элемента на тип элементов массива. Так третий элемент массива «int» – значений (для «int», размер которого составляет четыре байта), расположенного начиная с адреса, к примеру, 0x22FF00, имеет адрес 0x22FF0С.

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

 

Листинг 3.4. Динамические массивы.

 

#include <iostream>

 

using namespace std;

 

int main (void)

{

unsigned int x;

int *pinta;

 

cin >> x;

 

//выделение памяти под x значений типа int;

pinta = new int[x];

for (int i = 0; i < x; i++)

pinta[i] = i;

//операция освобождения памяти для массивов имеет «[]»;

delete[] pinta;

 

return 0;

}

 

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

 

Листинг 3.5. Многомерные динамические массивы.

 

#include <iostream>

 

using namespace std;

 

int main (void)

{

unsigned int x, y;

cin >> x >> y;

 

//указатель на массив указателей на миссив

// из x элементов типа int каждый;

int **pinta = new int*[x];

 

//явное создание подмассивов;

for (int i = 0; i < x; i++)

pinta[i] = new int[y];

 

//явное удаление подмассивов;

for (int i = 0; i < x; i++)

delete[] pinta[i];

delete[] pinta;

 

return 0;

}

 

3.3. C – Строки

В языке С++ существует два вида строк. Первый тип – строки в стиле языка С, представляющие из себя «char» – массивы с нулевым завершающим элементом. Работа с такими строками не отличается от работы с обыкновенными «char» – массивами. В стандартном библиотечном файле «cstring» объявлены функции по работе с С – строками.

Вторым типом строк являются объекты стандартного класса «string». Данный класс будет рассмотрен позднее.

Таблица 3.1. Основные функции по работе с С – строками.

Определение Описание
char *strcat(str1, str2), char *str1, *str2; Сцепление двух строк
char *strncat(str1, str2, n); char *str1, *str2; int n; Сцепление двух строк, где из второй берется не более n символов
int strcmp(str1, str2); char *str1, *str2; Сравнение двух строк в лексикографическом порядке
int strncmp(str1, str2, n); char *str1, *str2; int n; Сравнение первых n символов двух строк в лексикографическом порядке
char *strcpy(str1, str2); char *str1, *str2; Копирование строки str1 в строку str2
char *strncpy(str1, str2, n); char *str1, *str2; int n; Копирование не более первых n символов строки str1 в строку str2
int strlen(str); char *str; Определение длинны строки (без нулевого символа)
char *strchr(str, n); char *str; int n; Нахождение первого вхождения символа n
char *strrchr(str, n); char *str; int n; Нахождение последнего вхождения символа n
char *strpbrk(str1, str2); char *str1, *str2; Нахождение в строке str1 любой символ из строки str2
int strspn(str1, str2); char *str1, *str2; Определение длинны части строки str1, содержащей символы из строки str2
int strcspn(str1, str2); char *str1, *str2; Определение длинны части строки str1, не содержащей символы из строки str2
char *strtok(str1, str2); char *str1, *str2; Выделение из строки str1 отрезков, разделенных символами из строки str2

 





Поделиться с друзьями:


Дата добавления: 2016-09-06; Мы поможем в написании ваших работ!; просмотров: 409 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Если президенты не могут делать этого со своими женами, они делают это со своими странами © Иосиф Бродский
==> читать все изречения...

2444 - | 2317 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.