C++ за 21 день седьмое издание


int ThreeRowsThreeColumns [3][3] = {{-501, 206, 2011}, {989, 101, 206}, {303, 456, 596}}



Download 1,38 Mb.
bet58/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   54   55   56   57   58   59   60   61   ...   437
Bog'liq
word1

int ThreeRowsThreeColumns [3][3] = {{-501, 206, 2011}, {989, 101, 206}, {303, 456, 596}};


Он инициализирован способом, который можно рассматривать как три массива, каждый из которых содержит три целых числа. Здесь целочисленный элемент со значе­ нием 206 находится в позиции [0][1], а элемент со значением 456 — в позиции [2][2].

80 ЗАНЯТИЕ 4. Массивы и строки


Листинг 4.3 демонстрирует, как можно обращаться к целочисленным элементам в этом массиве.


ЛИСТИНГ 4,3. Доступ к элементам в многомерном м ассиве ____________________________



  1. #include




  1. using namespace std;


  2. 3

    int main()






















    л

    i

























    н

    ThreeRowsThreeColumns

    [3][3] = \










    5

    int

    456 , 596}};

    6

    {{—501,

    206,

    2011},

    (989,

    101, 206}, {303,

    п




























    1

    cout

    «

    "Row

    0: "«

    ThreeRowsThreeColumns

    [0] [0]

    «

    ft " \

    8

    9










    «

    ThreeRowsThreeColumns

    [0] [1]

    «

    v " \

    10










    «

    ThreeRowsThreeColumns

    [0] [2]

    «

    endl;

    11




























    12

    cout

    << "Row

    1: "«

    ThreeRowsThreeColumns

    [1] [0]

    «

    VI"\

    13

    14










    «

    ThreeRowsThreeColumns

    [1] [1]

    «

    If " \

    15










    «

    ThreeRowsThreeColumns

    [1] [2]

    «

    endl;

    16

    cout

    «

    "Row

    2: "«

    ThreeRowsThreeColumns

    [2] [0]

    «

    IV "\

    17

    18










    «

    ThreeRowsThreeColumns

    [2] [1]

    «

    VI" \

    19










    «

    ThreeRowsThreeColumns

    [2] [2]

    «

    endl;

    20




























  3. return 0;




  1. }



Результат


Row 0: -501 206 2011


Row 1: 989 101 206


Row 2: 303 456 596


Анализ


Обратите внимание на способ обращения к элементам в построчном массиве, начи­ нающемся с массива Row 0 (первый ряд с индексом 0) и заканчивающимся массивом Row 2 (третий ряд с индексом 2). Поскольку каждый из рядов — это массив, синтаксис для обращения к третьему элементу в первом ряду такой, как в строке 10.



ПРИМЕЧАНИЕ

Длина кода в листинге 4.3 существенно увеличивается при увеличении количе­ ства элементов в массиве или его размерностей. Фактически в профессиональ­ ной среде разработки такой код неприменим.



Более эффективный способ обращения к элементам многомерного массива приведен в листинге 6.14 занятия 6, “Ветвление процесса выполнения про­ грамм”. Там для доступа ко всем элементам подобного массива используется вложенный цикл for. Код с применением цикла for существенно короче и меньше склонен к ошибкам, а кроме того, на его длину не влияет изменение количества элементов в массиве.



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

81



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


Рассмотрим приложение, которое хранит медицинские записи больницы. Програм­ мист никак не может заранее знать, сколько записей должно хранить и обрабатывать его приложение. Он может сделать предположение о разумном пределе количества записей для маленькой больницы, превышение которого маловероятно. В этом случае он бес­ смысленно резервирует огромные объемы памяти и уменьшает производительность сис­ темы.



  1. таком случае нужно использовать не статические массивы, которые мы рассмотрели только что, а динамические, которые оптимизируют использование памяти и при необ­ ходимости увеличивают размер занимаемых ими ресурсов и памяти во время выполне­ ния. Язык C++ предоставляет очень удобный в работе динамический массив в форме типа s t d : : v ecto r, как показано в листинге 4.4.

ЛИСТИНГ 4,4. Создание динамического массива целых чисел и заполнение его значениями





  1. #include




  1. #include

  2. :




    1. using namespace std;








    1. int main()

6 : {

  1. vector DynArrNums (3);




  1. :




    1. DynArrNums[0] = 365;




    1. DynArrNums[1] = -421;




    1. DynArrNums[2]= 789;

1 2 :


13: cout « "Number of integers in array: " « DynArrNums.size()



  1. endl;



14:



  1. cout « "Enter another number for the array" « endl;




  1. int AnotherNum = 0;




  1. cin » AnotherNum;




  1. DynArrNums.push_back(AnotherNum);



19:


20: cout « "Number of integers in array: " « DynArrNums.size()



      1. endl;




    1. cout « "Last element in array: ";




    1. cout « DynArrNums[DynArrNums.size() - 1] « endl;








    1. return 0;




    1. }



Результат


Number of integers in array: 3


Enter another number for the array
2011



Number of integers in array: 4


Last element in array: 2011

82 ЗАНЯТИЕ 4. Массивы и строки


Анализ

Не волнуйтесь о синтаксисе векторов и шаблонов в листинге 4.4, — они пока еще не были объяснены. Попробуйте посмотреть вывод и соотнести его с кодом. Согласно вы­ воду, начальный размер массива составляет три элемента, что согласуется с объявлением вектора в строке 7. Зная это, вы все же можете в строке 15 попросить пользователя вве­ сти четвертое число и, что интересней всего, в строке 18 можете добавить его в вектор, используя метод p u s h b a c k (). Вектор динамически изменит свои размеры так, чтобы приспособиться к хранению большего объема данных. Это заметно по последую щ ему увеличению размера массива до 4. Обратите внимание на использование знакомого по статическому массиву синтаксиса доступа к данным в векторе. В строке 22 осущ ествля­ ется доступ к последнему элементу (каким бы он ни был по счету, поскольку его позиция вычисляется во время выполнения) при помощи индекса, который для последнего элемен­ та имеет значение р азм е р - 1, а метод s i z e () как раз и возвращает общее количество элементов вектора.





ПРИМЕЧАНИЕ

Для использования класса динамического массива std:: ector в код необ­ ходимо включить заголовок vector, как это сделано в строке 1 листинга 4.4.





#include

Более подробная информация о векторах приведена на занятии 17, “Классы динамических массивов библиотеки STL".





Строки в стиле С


Строки в стиле С (C-style string) — это частный случай массива символов. Вы уже

видели несколько примеров таких строк в виде строковых литералов, когда писали такой


код:



std::cout << "Hello World";

Это эквивалентно такому объявлению массива:





char SayHello[] = {'Н', 'е', '1*, '1', 'о', '


'W', 'o', 'г', '1*, 'd', '\0'};



std::cout << SayHello << std::endl;

Обратите внимание: последний символ в массиве — нулевой символ ' \ 0 '. Он также называется знаком окончания строки (string-term inating character), поскольку указывает компилятору, что строка закончилась. Такие строки в стиле С — это частный случай сим­ вольных массивов, последним символом которых всегда является нулевой символ ' \ 0 *. Когда вы используете в коде строковый литерал, компилятор сам добавляет после него символ ' \ 0 '.


Если вставить символ ' \ 0 ' в середину массива, то это не изменит его размер; однако обработка строки, хранящейся в данном массиве, остановится на этой точке. Это демон­ стрирует листинг 4.5.



Строки в стиле С

8 3




ПРИМЕЧАНИЕ
Символ ' \0 ' может показаться двумя символами, и, в самом деле, для его ввода следует нажать на клавиатуре две клавиши. Однако обратная косая чер­

та - это специальный управляющий код, который компилятор понимает и вос­ принимает \0 как нуль, т.е. это способ указать компилятору вставить нулевой символ или нуль.


Вы не можете ввести нулевой символ непосредственно, поскольку литерал ' 0 ' будет воспринят как символьный нуль с кодом ASCII 48, а не 0.


Чтобы увидеть этот и другие значения кодов ASCII, обратитесь к таблице в при­ ложении Д, “Коды ASCII”.


ЛИСТИНГ 4.5. Анализ завершающейся нулем строки в стиле С





  1. #include




  1. using namespace std;


Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   54   55   56   57   58   59   60   61   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish