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

Создание класса шаблона, ассоциативного массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пишу консольную змейку, крашит при увеличении размера http://www.cyberforum.ru/cpp-beginners/thread1492984.html
Появилось желание сделать свою игру на С++, так как нужно начинать с простого, решил сделать простую змейку. Нашёл в интернете пример, и взялся его переписывать. Пока что убрал некоторые функции, оставил только управление и вывод на экран. Вот пример: # include <iostream> # include <windows.h> # include <time.h> # include <conio.h> using namespace std; int snake_size, dir_x, dir_y,...
C++ Найти площадь круга по длине окружности Вам предоставляется окружность круга. Найти площадь круга. Формат входных данных Ввод содержит положительное вещественное число l (0 <l ≤ 20000) Формат результата Значение должно быть дано с абсолютной или относительной погрешностью не более 10^-6. http://www.cyberforum.ru/cpp-beginners/thread1492972.html
Вычислить длину окружности и площадь круга C++
Вычислить длину окружности и площадь, заключенную в круге Формат входных данных Ввод содержит одно число R (0 ≤ R ≤ 10000) - радиус окружности. Формат результата Выход два числа - длина окружности и площадь, ограниченная окружностью радиуса R. Числа должны быть предоставлены с абсолютной или относительной погрешностью не более 10^-6.
C++ Найти площадь поверхности и объем куба, зная длину его ребра.
Мы знаем длину ребра куба. Найти лицевой области, общую площадь поверхности и объем куба. Формат входных данных Ввод содержит одну положительное целое число (0 <≤ 10000). Формат результата Выходные три целых числа, разделенных пробелами - площадь поверхности, общая площадь поверхности и объем куба. Примеры Входные данные Результат работы
C++ Периметр и площадь прямоугольного треугольника http://www.cyberforum.ru/cpp-beginners/thread1492928.html
Длина ног а и б прямоугольного треугольника даны. Найти его периметр и площадь Формат входных данных Ввод содержит два реальных положительных чисел (0 <а≤ 10^5) и В (0 <б ≤ 10^5) - ноги прямоугольного треугольника. Числа разделены одним пробелом. Формат результата Написать на выход два вещественных числа каждая в отдельной строке. Первое число периметр треугольника. Второй номер является...
C++ Поменять местами наибольшие элементы в верхней и нижней половинах матрицы В матрице A( n- строк, m- столбцов; n- четное) поменять местами наибольшие элементы в ее верхней и нижней половинах. Для поиска индексов наибольшего элемента в заданной части матрицы использовать подпрограмму. Не получается поменять местами элементы и вывести получившеюся матрицу #include <iostream> #include <cmath> #include <iomanip> подробнее

Показать сообщение отдельно
SherHun
29 / 29 / 15
Регистрация: 22.06.2015
Сообщений: 102
04.07.2015, 21:29
Цитата Сообщение от The New Guy Посмотреть сообщение
2. В ф-ии GetElem несоответствие типов со знаком и без. строчка с return возвр. адреса локальной или временной переменной, тоже не ясно.
C++
1
2
3
4
5
6
7
const ElemType& IContainer<ElemType, IndexType>::GetElem(const IndexType & index)
{
* * if(index>arr.size())
* * * * std::cout<<"exception \n";
* * * * throw ElemNotFound<IndexType> /*err */(index);
* * return arr[index];
}
C++
1
 if(index>arr.size())
а если индекс меньше нуля ?

фигурные скобки поставьте,
исключение кидаете в любом случае.
C++
1
2
3
4
5
 if(index>arr.size())
{
std::cout<<"exception \n";
 throw ElemNotFound<IndexType> /*err */(index);
}
Возвращайте не адрес
C++
1
const ElemType&
,
а значение
C++
1
const ElemType



проверка вообще не корректна
C++
1
if(index>arr.size())
а если IndexType строка ?

Вы же понимаете что в мэпе значения
могут повторяться ?

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
63
64
65
66
67
68
69
70
71
72
73
74
#include <string>
#include <iostream>
#include <map>
 
template<class elType>
class ElemNotFound
{
private:
    elType value;
public:
    ElemNotFound(const elType & elem) :value(elem){}
    void mesg();
};
template<class elType>
void ElemNotFound<elType>::mesg()
{
    std::cout << "Element #" << value << " not found\n";
}
 
 
template <class KeyType, class ValueType>  class IContainer
{
private:
    std::map<KeyType, ValueType> arr;
public:
    IContainer() {};
    IContainer(const KeyType & elem, const ValueType & index);
    virtual const ValueType  GetValue(const KeyType & elem) const;
    virtual void PutElem(const ValueType& index, const KeyType& elem);
};
template <class KeyType, class ValueType>
IContainer<KeyType,ValueType>::IContainer(const KeyType & elem, const ValueType & index)
{
    arr[elem] = index;
}
template <class KeyType, class ValueType>
void IContainer<KeyType, ValueType>::PutElem(const ValueType& index, const KeyType& elem)
{
    arr[elem] = index;
}
template <class KeyType, class ValueType>
const ValueType  IContainer<KeyType, ValueType>::GetValue(const KeyType & elem) const
{
    std::map<KeyType, ValueType>::const_iterator it = arr.find(elem);
    
    if (it == arr.end())
    {
        
        throw ElemNotFound<KeyType>(elem);
    }
    return arr.at(elem);
}
 
int main()
{
 
    IContainer<std::string, int> blablabla("golden joe", 6);
    blablabla.PutElem(4, "duck");
    
    std::cout << blablabla.GetValue("golden joe");
    try
    {
        std::cout << blablabla.GetValue("gol joe") << std::endl;
    }
    catch (ElemNotFound<std::string> & myexc/*...*/)
    {
        std::cout << "My exception \n";
        myexc.mesg();
    }
 
    std::cin.get();
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru