Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
romasimeiz
6 / 6 / 0
Регистрация: 11.04.2011
Сообщений: 260
#1

Исследование быстродействия алгоритма - исправить ошибки в коде - C++

14.05.2014, 17:56. Просмотров 239. Ответов 2
Метки нет (Все метки)

Добрый день!
Прошу подсказать несколько технических моментов ибо в c++ новичок.
Сделал по методичке лабораторную работу, по поиску значений. Всё работает, разобрался.
Затем возникла задача исследовать быстродействие алгоритма.
Всё по той же методичке добавил в программу ещё некоторые функции для исследования, но непонятны технические моменты. Выдало 6 ошибок, я понимаю, что они связаны с типами, списками и т.д. Но не могу понять что и почему. Видимо что то неправильно объявил.
Объясните пожалуйста что не так.

Кусок файла *.h :

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
template <class K, class I> class E
{
    K   ke;
    I   it;
    bool  valid;
public:
    E() : valid( false ) {}
    E( const K& ke_, const I& it_ ) : ke( ke_ ), it( it_ ), valid( true ) {}
    
    const K& key() const { return ke; }
 
    I& item() { return it; }
    void set_item( const I& it_ ) { it = it_; }
 
    bool is_valid() const { return valid; }
 
    bool operator==( const E& e ) const { return ke == e.ke; }  
    bool operator<( const E& e ) const { return ke < e.ke; }    
};
class lab05
{
    typedef int t_item;
    typedef int K;
    typedef int I;  
    typedef std::pair<K,I> elem;
    typedef std::vector<elem> t_cont;
    typedef std::vector<E<K, I> > T;
    static E bad_elem; // error C2955: E: для использования класса шаблон требуется список аргументов шаблон см. объявление 'E' 
                                 
    t_item rnd( t_item range, t_item bias = 0 ) const
    { return rand() * range / RAND_MAX + bias; }
 
    typedef vector<t_item> t_items;
 
    t_items m_Items;
    int m_iLeft, m_iRight, m_iPrev;
    int m_iPtr;
    t_item  m_Key;
    int m_iStep[2];
    int m_iRes[2];
    t_cont cont;
    void binary_search();
    void linear_search();
    int calc_mid() const { return ( m_iRight - m_iLeft ) / 2 + m_iLeft; }
    void move_right_border( int x ) { m_iPrev = m_iRight; m_iRight = x; }
    void move_left_border( int x ) { m_iPrev = m_iLeft; m_iLeft = x; }
    &E find_rand_test( const K& ke_,  T& tab, int& count ); // error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "find_rand_test"
// и ещё две одинаковых с сообщением : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию 
//сюда же  warning C4183: find_rand_test: отсутствие возвращаемого типа; предполагается функция-член, возвращающая 'int'
Файл реализации:

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
E& lab05::find_rand_test( const K& ke_,  T& tab, int& count )
    { // здесь error C2556: E &lab05::find_rand_test(const lab05::K &,lab05::T &,int &): перегруженная функция отличается от 'int lab05::find_rand_test(const lab05::K &,lab05::T &,int &)' только возвращаемым типом  см. объявление 'lab05::find_rand_test'
 
// ещё одна : error C2040: lab05::find_rand_test: "E &(const lab05::K &,lab05::T &,int &)" отличается по уровням косвенного обращения от "int (const lab05::K &,lab05::T &,int &)"
 
        for( T::iterator i = tab.begin(), e = tab.end(); e != i; ++i )
        {   ++count;
            if( i->key() == ke_  ) return *i;
        }
        return bad_elem;
    }
 
int lab05::find_test_key( const t_cont& cont ) 
{ 
return cont[rand() % cont.size()].key();  // error C2039: key: не является членом "std::pair<_Ty1,_Ty2>"
}
 
void lab05::make_seq( t_cont& cont, int N )
{
        cont.clear();
        cont.reserve( N );
        for( int i = 0; i < N; ++i )
        {
            int el = rand();
            cont.push_back( elem( el, el ) );
        }
}
 
void lab05::test( fstream& res, int N, t_cont& cont )
{
    int numTests = 4;
    make_seq( cont, N );
    int cmp_count = 0;
    for( int t = 0; t < numTests; ++t )
    {
        int k = find_test_key( cont );
        find_rand_test( k, cont, cmp_count );
    }
    cmp_count /= numTests;
    res << N << " " << cmp_count << std::endl;
}
 
void lab05::Input( int N, t_item Range, t_item Bias )
{
    t_cont cont;
    std::fstream res( "test.log", std::ios_base::trunc | std::ios_base::out );
    m_Items.clear();
    m_Items.reserve( N );
    int S=5;
    int minN = 2;
    int deltaN = 1;
    srand( std::clock() );
    for( int n = 0; n < S; ++n )
    {
    int N = minN + n * deltaN;
    
    }
 
    for( int i = 0; i < N; ++i )
        m_Items.push_back( rnd( Range, Bias ) );
 
    stable_sort( m_Items.begin(), m_Items.end() );
}

Прошу прощения за глупые вопросы, но справиться пока сам не могу
Буду очень благодарен за любую помощь!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 17:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исследование быстродействия алгоритма - исправить ошибки в коде (C++):

Найти ошибки в коде и исправить эти ошибки (Наследование) - C++
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h (inline) #pragma once class list...

Найти ошибки в коде и исправить эти ошибки - C++ - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить откуда. A.h #pragma once ...

Найти ошибки в коде и исправить эти ошибки - C++
Есть у меня вот такой код: #include &lt;iostream&gt; using namespace std; class A{ private: int* a; size_t size_; ...

Исправить ошибку в коде волнового алгоритма - C++
вот код программы #include using namespace std; int plov(int n,int i,int j,int k,char*** a,int sum) { if((a== '.' ) &amp;&amp;...

Найти и исправить ошибки в реализации алгоритма Дейкстры - C++
Алгоритм Дейкстры (построение путей с минимальными цепями) #include&lt;iostream.h&gt; #include&lt;string.h&gt; #include&lt;stdio.h&gt; ...

Исправить ошибки в коде - C++
Пожалуйста помогите исправить ошибки Первая часть кода (вторая в комментариях) #define _CRT_SECURE_NO_WARNINGS #include...

2
kupnu4
26 / 26 / 9
Регистрация: 03.05.2013
Сообщений: 71
15.05.2014, 00:02 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
в заголовочном файле:
1) класс E у тебя шаблонный. укажи в объявлении <type1,type2>
2) правильный возвращаемый тип E& а у вас &E. решит все ошибки
в исполняемом файле:
1) первые две решаются исправлением в заголовочном файле
2) третья:
C++
1
    cont[rand() % cont.size()].key();
нужно заменить скорее всего на:
C++
1
cont[rand() % cont.size()].second.key();
так как вы обращаетесь к элементу вектора, которым является пара (pair), и у нее нет метода key(). но он у вас есть у типа K, который является элементом second в pair.

вроде это все. но в общем-то код страшен.
1
romasimeiz
6 / 6 / 0
Регистрация: 11.04.2011
Сообщений: 260
15.05.2014, 09:06  [ТС] #3
спасибо ) код взял из методички ) ещё раз огромное спасибо за помощь! )
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2014, 09:06
Привет! Вот еще темы с ответами:

Исправить ошибки в коде - C++
как исправить ошибки где я допустил их

Исправить ошибки в коде - C++
int _tmain(int argc, _TCHAR* argv) { return 0; } #include &quot;stdio.h&quot; #include &quot;conio.h&quot; #include &quot;windows.h&quot; // Две...

Исправить ошибки в коде - C++
пишу программу при компиляции ошибки main.cpp(19) : warning C4508: 'main' : function should return a value; 'void' return type...

Исправить ошибки в коде - C++
Я тут на писал правильно скажите? #include &quot;stdafx.h&quot; #include &lt;iomanip&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cmath&gt; ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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