vector
for (;;) {
cin >> n;
if (n==0)
break;
v.push_back(n);
}
// Идем от конца к началу
auto p = v.end();
while (p != v.begin() {
p--;
cout << *p << "\n";
}
void swp(string& x, string& y)
{
swp(x.p, y.p);
swp(x.len, y.len);
}
// Уменьшить счетчик в строке,
// на которую указывает p.
// Если надо, удалить строку.
void drop_ptr()
{
(*p)--;
if (*p == 0) {
cout << "Deleting " << p + 1;
delete [] p;
}
}
public:
shared_string& operator=
(const shared_string& from)
{
if (p != from.p) {
drop_ptr();
set_ptr(from.p);
}
return *this;
}
void print() const
{
cout << p+1;
}
}; // Конец определения класса
Глобальное пространство имен
::f() – глобальная функция
using ::f;
M.б. вложенные
abc::klm
Итераторы и константы
const_iterator
void f(const vector
{
// Тут просто итераторы
// использовать нельзя
vector
=v.begin();
…
Но, еще раз, м.б. лучше не писать тип p явно:
auto p = v.begin();
erase
l.erase(p);
Тоже работает быстро
Тоже работает и для vector, но за линейное время
Что будет, если написать так?:
cout << m[99.9];
Напечатается 0 !
Добавляется новый ключ, значение равно 0
В общем случае – для значения вызывается к-р по умолчанию
Можно быстро найти
значние по ключу:
p = m.find(i);
if (p == m.end() )
cout << "Не найдено";
else
cout << p->second;
поиск – быстро
O(log N)
pb["Петров"] = 2991234;
pb["Сидоров"] = 1231231;
// Печатаем телефон Петрова
cout << pb["Петров"];
// Печатаем все телефоны
for (auto p = pb.begin();
p != pb.end(); p++) {
cout << p->first << "-"
<< p->second <<"\n";
}
T pop
{
return stk[--size];
}
};
Использование
stack
stack
stack
stack
При использовании параметры надо указывать явно
Параметры по умолчанию
template
stack
template
class abc
template
class abc
template
class abc
template
complex(const T1& from) :
re(from.re), im(from.im)
{}
};
// Хотим задать преобразование
// complex -> complex
complex
complex
Генерируется конструктор
complex
(const complex
// Вариант 1б - исправленный
template
void print(T& c)
{
typename T::iterator p;
for (p = c.begin(); p != c.end();
p++)
cout << *p << " ";
}
// Вариант 1г – C++11
template
void print(const T& c)
{
for (auto p = c.begin();
p != c.end(); p++)
cout << *p << " ";
}
Преимущества:
Можно вызывать не только для всего контейнера
print(v.begin() +2,
v.end()-3);
Очень мало требует от T
Только *, ++, !=.
int a[10];
…
print(a, a+10);
Недостатки:
Дольше писать ☹
Напоминание – как вводить слова:
#include
Описать тип (типы?) для телефонной книги: имя → телефон, имя, адрес (день рождения?).
Привести пример работы с таким типом.
Можно реализовать с использованием vector или list (или deque)
(И тогда вы можете сказать, что применили шаблон «адаптер»…)
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть