Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
krautcat
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 4
#1

Дек-шаблон - C++

22.05.2014, 01:34. Просмотров 1191. Ответов 7
Метки нет (Все метки)

Доброй ночи.
У меня вопрос.
Я хочу реализовать дек, а потом на его основе сделать шаблон. В деке могут храниться как числа, так и строки. Я попытался реализовать через промежуточный класс. На этапе компиляции выводит ошибку LNK2019.
Где именно ошибка, я не знаю.
Очень хочу услышать дельные советы по реализации дека-шаблона.

Объявление классов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream>
 
#ifndef my_classes
#define my_classes
 
using namespace std;
 
class CInteger
{
public:
    int value;
    CInteger () {value=0;};
    CInteger (int param) { value = param; };
    void Out () {cout << value << endl;}
};
class CString
{
public:
    char *value;
    CString (char *param) {value=new char [strlen(param)+1]; value[0]='\0'; strcpy(value, param);};
    ~CString () {delete[] value;};
    void Out () {cout << value << endl;}
};
 
template <class type>
class CElement
{
public:
    type value;
    type *next;
    type *prev;
    CElement<type> (char *param, type *previous, type *next);
    ~CElement<type> (); 
};
 
template <class deque>
class CDeque
{
private:
    CElement<deque> *first;
    CElement<deque> *last;
public:
    CDeque<deque> (char *param);
    ~CDeque<deque> ();
    void PushBack (char *param);
    void PushFront (char *param);
    void Delete (char *param);
    void Out ();
    char* StringOut ();
};
 
template <class type>
class CDeque_Sort: public CDeque <type>
{
public:
    void MergeSort ();
}
 
#endif my_classes

Описание методов
[СPP]#include "stdafx.h"
#include "my_classes.h"
#include <string.h>

;
template <class type> CElement<type>::CElement (char *param, type *previous, type *next)
{
if (typename == CString)
this->value = CString (param);
if (typename == CInteger)
this->value = CInteger (atoi(param));
this->prev = previous;
this->next = next;
};
template <class type> CElement<type>::~CElement ()
{
delete[] this->prev;
delete[] this->next;
this->value.~type();
};

template <class deque> CDeque<deque>::CDeque (char *param)
{
int counter, co_sp=0, j = 0;
char value [300];
type = deque;
CElement<type> *iterator;
CElement<type> *neu;

this->first = this->last = NULL;

for (counter=0; counter<strlen(param))
if (param[counter]==' ')
co_sp++;
if (param[strlen(param)]!=' ')
co_sp++;

for (counter=0; counter<strlen(param))
{
if (param[counter]==' ')
{
if (this->first = NULL)
{
iterator = new CElement<type> (value, NULL, NULL);
this->first = iterator;
neu = first;
}
else
{
neu = NULL;
neu = new CElement<type> (value, NULL, NULL)
neu->prev = iterator;
iterator->next = neu;
iterator = neu;
}
j = 0;
}
else
{
value[j] = param[counter];
j++;
value[j] = '\0';
}
}
this->last = iterator;
};
template <class deque> void CDeque<deque>::Out ()
{
type = deque;
CElement<type> *iterator = this->first;
while (iterator->next != NULL)
{
iterator->value.Out();
iterator = iterator->next;
}
};
[/CPP]

Основная программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Лабораторная работа 8.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "my_classes.h"
 
 
;int _tmain(int argc, _TCHAR* argv[])
{
    char *temp = new char [300];
    cin.getline(temp, 300);
    CDeque<CString> A (temp);
    A.Out();
    
    system("pause");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 01:34     Дек-шаблон
Посмотрите здесь:

дек - C++
как сделать такую вещь? реализовать и протестировать контейнерный класс динамической структуры данных такой как дек. класс должен иметь...

Простой дек - C++
Помогите решить задачу : Реализуйте структуру данных &quot;дек&quot;. Напишите программу, содержащую описание дека и моделирующую работу дека,...

Шаблонный дек - C++
Задача реализовать шаблонный класс дека, и класс Итератора для навигации по деку. До добавления шаблонов все хорошо работало. Ныне такие...

Дек символов - C++
Доброго времени суток всем. У меня такая проблема: есть задача - Реализовать класс &quot;Дек символов&quot; (на базе списка). Реализовать...

Полный дек - C++
Добрый день! мучаюсь с задачей - реализовать тип и функции (инициализация,добавление\извлечение элементов с обеих сторон,проверка на...

Простой дек - C++
Всем доброго вечера Столкнулся со следующей проблемой. Есть задание на простой дек: Реализуйте структуру данных &quot;дек&quot;. Напишите...

Очередь и дек С++ - C++
Ребят, помогите пожалуйста сделать небольшую программу, ну просто горит(((. :wall: Разработать программу на С++, для реализации основных...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.05.2014, 02:03     Дек-шаблон #2
Цитата Сообщение от krautcat Посмотреть сообщение
На этапе компиляции выводит ошибку LNK2019.
Где именно ошибка, я не знаю.
текст ошибки сюда выложить, корона упадет?
krautcat
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 4
22.05.2014, 02:08  [ТС]     Дек-шаблон #3
Цитата Сообщение от Jupiter Посмотреть сообщение
текст ошибки сюда выложить, корона упадет?
Прошу прощения.

C++
1
2
3
Error   1   error LNK2019: unresolved external symbol "public: __thiscall CDeque<class CString>::~CDeque<class CString>(void)" (??1?$CDeque@VCString@@@@QAE@XZ) referenced in function _wmain
Error   2   error LNK2019: unresolved external symbol "public: void __thiscall CDeque<class CString>::Out(void)" (?Out@?$CDeque@VCString@@@@QAEXXZ) referenced in function _wmain
Error   3   error LNK2019: unresolved external symbol "public: __thiscall CDeque<class CString>::CDeque<class CString>(char *)" (??0?$CDeque@VCString@@@@QAE@PAD@Z) referenced in function _wmain
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.05.2014, 02:24     Дек-шаблон #4
а где описание ~CDeque ?
krautcat
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 4
22.05.2014, 02:32  [ТС]     Дек-шаблон #5
Цитата Сообщение от Jupiter Посмотреть сообщение
а где описание ~CDeque ?
Я его пока не сделал, of course.
Сейчас пытался сделать без промежуточного класса. Пока тоже безуспешно.
Отпишусь после написания деструктора.

Аналогичная ошибка. Деструткор описан.
outoftime
║XLR8║
507 / 429 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
22.05.2014, 03:08     Дек-шаблон #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
krautcat, у тебя ошибка в логике. Где, подсказывать не буду, т.к. оно и так очень заметно.
Если хочешь оптимизировать немного по скорости делай на массивах, скажем по 10 элементов.

Задания на стеки/очереди (без шаблонных классов stack, queue) тут моя недавняя реализация стека на массивах (в этом случае массив каждый раз перевыделяется, а тебе надо доделать что-бы он состоял из множества частей).

Если сделаешь на массивах получишь усложнение логики для их поддержки, но увеличится производительность на частых операциях добавления, удаления элементов, так как память под него выделять не надо будет (она уже будет выделена). Частые операции выделения памяти сильно тормозят. Да и те же move constructable & move assigneable интерфейсы поддерживать проще будет.
krautcat
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 4
22.05.2014, 03:17  [ТС]     Дек-шаблон #7
Цитата Сообщение от outoftime Посмотреть сообщение
Если хочешь оптимизировать немного по скорости делай на массивах, скажем по 10 элементов.
По заданию - дек. Вот и моделирую.

Буду копать в сторону логики тогда.

Добавлено через 1 минуту
Цитата Сообщение от outoftime Посмотреть сообщение
Где, подсказывать не буду, т.к. оно и так очень заметно.
Хотя бы направление, куда копать... На самом деле, я в шаблонах не шарю практически.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 11:53     Дек-шаблон
Еще ссылки по теме:

Дек,заполение с конца - C++
Помогите плз написать функцию для заполнения дека с конца с клавиатуры и если можно с файла,если у нас есть: struct shop { int...

Вектор, дек, список - C++
Здравствуйте. Помогите пожалуйста разобраться в ошибках, которые возникают при компиляции. Вот они 145 C:\Documents and...

Дек в виде массива - C++
Подскажите как реализовать дек в виде массива.

Дек и удаление элемента - C++
Создать список из целых чисел. Найти минимальный элемент и удалить из списка все элементы, равные минимальному. #include &lt;iostream&gt; ...

Добавление структурированных данных в дек - C++
Имеется структура Код: struct stud { char surname; int year; double mark; char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
507 / 429 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
22.05.2014, 11:53     Дек-шаблон #8
Цитата Сообщение от krautcat Посмотреть сообщение
На самом деле, я в шаблонах не шарю практически.
Цитата Сообщение от krautcat Посмотреть сообщение
Буду копать в сторону логики тогда.
В сторону логики а не семантики.
Yandex
Объявления
22.05.2014, 11:53     Дек-шаблон
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru