Двусвязный список. Конструктор копирования. Оператор присваивания

Слайд 2

1

1

prev

pn=prev->m_pNext

Добавление узла после prev

prev

Node *pn;
pn= prev->m_pNext;
this->m_pPrev= prev;
this->m_pNext= pn;
prev->m_pNext= this;
pn->m_pPrev= this;

1 1 prev pn=prev->m_pNext Добавление узла после prev prev Node *pn; pn=

Слайд 3

Исключение узла

1

prev

2

1

2

if (m_pPrev)
m_pPrev->m_pNext=this->m_pNext;
if (m_pNext)
m_pNext->m_pPrev=this->m_pPrev;

Исключение узла 1 prev 2 1 2 if (m_pPrev) m_pPrev->m_pNext=this->m_pNext; if (m_pNext) m_pNext->m_pPrev=this->m_pPrev;

Слайд 4

Конструктор копирования

Head

Tail

Head

1

2

3

4

Tail

Head

Tail

copy1

0

0

0

0

Head

copy1

0

0

Tail

copy2

size=0

List::List (const List& other) //конструктор копирования
{
//1) связываем свои Head и

Конструктор копирования Head Tail Head 1 2 3 4 Tail Head Tail
Tail;
//2) инициализируем поля класса
//3) считываем данные из другого списка, начиная с головы, а копируем в конец своего
}

0

0

Слайд 5

Конструктор копирования (move)

Head

Tail

Head

1

2

3

4

Tail

Head

Tail

0

0

0

0

//конструктор move- копирования
List::List (List&& other)
{
//1) забираем у "стражей" временного

Конструктор копирования (move) Head Tail Head 1 2 3 4 Tail Head
объекта весь список //отобрали
//2) замыкаем стражей временного объекта друг на друга // «обнулили»
}

0

0

Head

1

2

3

4

Tail

0

0

Слайд 6

Оператор присваивания

//оператор присваивания
List& List::operator=(const List& other)
{
//проверяем, что не себя копируем
//1) удаляем

Оператор присваивания //оператор присваивания List& List::operator=(const List& other) { //проверяем, что не
весь свой список (чистим)
//2) считываем данные из другого списка, начиная с головы, а копируем в конец своего
}

Head

11

12

Tail

0

Head

21

22

23

24

Tail

0

0

0

Head

Tail

0

0

Head

copy21

copy22

copy23

copy24

Tail

0

0

Head

11

12

Tail

0

0

Слайд 7

Оператор присваивания (эффективный_1случай)

List& List::operator=(const List& other) {
//проверяем, что не себя копируем
//1) определяем

Оператор присваивания (эффективный_1случай) List& List::operator=(const List& other) { //проверяем, что не себя
рабочие переменные для узлов, следующих после Head ( для каждого списка)
//2) определяем какой из списков имеет меньший размер: min_size
//3) копируем из other в «свой» список min_size элементов (в цикле)
//4) если свой список меньше другого, то добавляем недостающие данные в ХВОСТ своего
// иначе удаляем ненужные узлы из своего списка
 }

Head

11

12

Tail

0

Head

21

22

23

24

Tail

0

0

0

Head

21

22

Tail

0

0

23

23

Head

21

22

Tail

0

0

24

Слайд 8

Оператор присваивания (эффективный_2случай)

List& List::operator=(const List& other) {
//проверяем, что не себя копируем
//1) определяем

Оператор присваивания (эффективный_2случай) List& List::operator=(const List& other) { //проверяем, что не себя
рабочие переменные для узлов, следующих после Head ( для каждого списка)
//2) определяем какой из списков имеет меньший размер: min_size
//3) копируем из other в «свой» список min_size элементов (в цикле)
//4) если свой список меньше другого, то добавляем недостающие данные в ХВОСТ своего
// иначе удаляем ненужные узлы из своего списка
 }

Head

21

22

Tail

0

0

Head

11

12

13

14

Tail

0

0

Head

21

22

13

14

Tail

0

0

Head

21

22

Tail

0

0

Имя файла: Двусвязный-список.-Конструктор-копирования.-Оператор-присваивания.pptx
Количество просмотров: 21
Количество скачиваний: 0