6. Как оценить скорость?
Стандартный размер наименьшей
ячейки памяти равен восьми битам, то есть
восьми двоичным разрядам.
Совокупность из 8 битов является
основной единицей представления данных
– байт.
7. Указатели
Указатель (англ. pointer) — переменная,
диапазон значений которой состоит из
адресов ячеек памяти или специального
значения — нулевого адреса. Последнее
используется для указания того, что в
данный момент там ничего не записано.
8. Указатели
Указатель (англ. pointer) — переменная,
диапазон значений которой состоит из
адресов ячеек памяти или специального
значения — нулевого адреса. Последнее
используется для указания того, что в
данный момент там ничего не записано.
9. Указатели
#include <iostream>
using namespace std;
int main() {
double a = 7.5;
cout << "a contain: " << a << endl <<
"a address is " << &a << endl;
return 0;
}
a contain: 7.5
a address is 0xbfea6ef8
10. Указатели
#include <iostream>
using namespace std;
int main() {
int N = 5;
int* a = new int[N];
for (int i = 0; i < N; i++)
cout << "a[" << i << "] = " <<
&a[i] << endl;
cout << "sizeof(int value) = “
<< sizeof(N) << endl;
return 0;
}
11. Указатели
#include <iostream>
using namespace std;
int main() {
int N = 5;
int* a = new int[N];
for (int i = 0; i < N; i++)
cout << "a[" << i << "] = " << &a[i]
<< endl; cout << "sizeof(int value) =
" << sizeof(N) << endl; return 0;
}
a[0] = 0x84a6008
a[1] = 0x84a600c
a[2] = 0x84a6010
a[3] = 0x84a6014
a[4] = 0x84a6018
sizeof(int value) = 4
12. Указатели
#include <iostream>
using namespace std;
int main() {
int N = 2;
int a[N][N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cout << "a[" << i << "][" << j << "]
= “
<< &a[i][j] << endl;
return 0;
}
13. Указатели
#include <iostream>
using namespace std;
int main() {
int N = 2;
int a[N][N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cout << "a[" << i << "][" << j << "]
= “
<< &a[i][j] << endl;
return 0;
}
a[0][0] = 0xbfe4d258
a[0][1] = 0xbfe4d25c
a[1][0] = 0xbfe4d260
a[1][1] = 0xbfe4d264
14. Указатели
#include <iostream>
using namespace std;
int main() {
int d = 25;
int* a = &d;
cout << "d = " << d << " " << "&d = “
<< &d << endl << "a = " << a << " *a = “
<< *a << endl << "&(*a) = " << &(*a)
<< endl;
*a = 123;
cout << "d = " << d << endl << "*a = “
<< *a << endl;
return 0;
}
d = 25 &d = 0xbfeff258a = 0xbfeff258 *a
= 25&(*a) = 0xbfeff258d = 123*a = 123
15. Указатели
#include <iostream>
using namespace std;
int main() {
int N = 5;
int p[N];
for (int i = 0; i < N; i++) {
p[i] = i;
cout << "p[" << i << "] = “ << p[i] << " ";
}
cout << endl;
for (int i = 0; i < N; i++) {
*(p+i) = (N-1) – i;
cout << "p[" << i << "] = “ <<
p[i] << " “;
}
cout << endl;
return 0;
}
22. Связные списки
— базовая динамическая структура данных,
состоящая из узлов, каждый из которых
содержит как собственно данные, так и одну
или две ссылки («связки») на следующий
и/или предыдущий узел списка.
23. Связные списки
struct node {
Item item;
node *next;
node (Item x, node* t) {
item x; next = t;
};
};
typedef node *link;
link x = new node;
38. Стек
Стек (англ. stack — стопка) — структура данных,
представляющая из себя список элементов,
организованных по принципу LIFO (англ. last in —
first out, «последним пришёл — первым вышел»).
41. Стек и STL
У стека есть немного функций:
•push() - добавить элемент
•pop() - удалить верхний элемент
•top() - получить верхний элемент
•size() - размер стека
•empty() - true, если стек пуст
42. Стек и STL
#include <stack>
// ---stack<char> s;
const int n = x.length();
for(int i = 0; i < n; ++i)
s.push(x[i]);
43. Очереди
Очереди, как следует из название, используют
принцип first in first out (FIFO). То есть, тот, кого мы
первым запихнули в очередь, первым из нее и
выйдет (хотя в реальной жизни не всегда так....)
45. Очереди и STL
Перечень функций почти тот-же:
•push() - добавить элемент
•pop() - удалить первый элемент
•size() - размер очереди
•empty() - true, если очередь пуста
•front() - получить первый элемент
•back() - получить последний элемент
46. Очереди и STL
#include <queue>
// …
queue<int> events;
int n;
while (cin>>n)
events.push(n);
while (!events.empty) {
make(events.front());
events.pop();
}