crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

7 страниц V  « < 3 4 5 6 7 >  
Ответить в данную темуНачать новую тему
> Бысрый способ получить 100 наименьших элементов, из 10 000 000 000 записей или более
Алексей1153
  опции профиля:
сообщение 25.8.2010, 6:54
Сообщение #41


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


panter_dsd, я в студии делал - там компилится. А ты где?

А ты, случаем, не поставил main перед реализацией функции ? )

тогда предопределение попробуй добавить перед мейном:
template<typename T>
void getNLager (typename const std::vector <T> &v, unsigned int n,std::list<T>& list_out);


И попробуй ещё дописать "typename" перед "std::list<T>& list_out" в списке аргументов функции
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 25.8.2010, 10:14
Сообщение #42


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Алексей1153 @ 25.8.2010, 7:54) *
И попробуй ещё дописать "typename" перед "std::list<T>& list_out" в списке аргументов функции

typename не надо дописывать и в первом аргументе.
и вообще typename должен применяться к qualified-id зависящего от шаблонного параметра:
Цитата
typename-specifier:
typename ::opt nested-name-specifier identifier
typename ::opt nested-name-specifier templateopt simple-template-id


Сообщение отредактировал DEADHUNT - 25.8.2010, 10:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 25.8.2010, 11:32
Сообщение #43


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Выкидывание typename помогло.
Алексей1153, что-то мне интересно. С шаблонами хорошо знаком, а компилятор от IDE и библиотеки отделить не можешь...
Я компилировал g++ (Gentoo 4.4.4-r1 p1.1, pie-0.4.5) 4.4.4. Т.е. не студийным компилером.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 25.8.2010, 18:40
Сообщение #44


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Заканчиваем с оффтопом.
Вот последняя редакция, еще есть замечания?
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>

template<typename T>
void getNLager (const std::vector <T> &v, std::vector<T>& vOut, uint n)
{
    vOut.clear();

    if (v.empty () || n >= v.size ()) {
        return;
    }

    std::list <T> l;
    l.insert (l.begin() ,v.begin (), v.begin () + n);
    l.sort ();
    
    for (typename std::vector<T>::const_iterator eIt = v.begin() + n, eEnd = v.end (); eIt != eEnd; ++eIt) {
        if (*eIt < *l.begin ()) {
            continue;
        }

        const typename std::list <T>::iterator it = lower_bound (l.begin (), l.end (), *eIt);

        l.insert (it, *eIt);
        l.pop_front ();
    }

    vOut.reserve (n);
    vOut.assign (l.begin (), l.end ());
}


int main (int argc, char **argv)
{
    std::vector <int> etalon;
    etalon.reserve (1000000);

    for (int i = 0; i < 1000000; i++) {
        etalon.push_back (i);
    }

    std::vector <int> v;
    getNLager (etalon, v, 100);

    for (std::vector <int>::iterator it = v.begin (), end = v.end (); it!=end; ++it) {
        std::cout << *it << std::endl;
    }

    return 0;
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 25.8.2010, 20:10
Сообщение #45


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Перенес флейм в другую тему, В любимый Алексей1153 раздел "Треп", чтобы потрепаться. :)

Смотрите: Что есть что, с чем можно и куда....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 25.8.2010, 22:46
Сообщение #46


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Эдик, я вот одного не понял. Ты поставил условие - без использования стандартных контейнеров и прочего, а тут решения лишь с ними и приводят! Почему?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 25.8.2010, 22:50
Сообщение #47


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(AD @ 25.8.2010, 23:46) *
Эдик, я вот одного не понял. Ты поставил условие - без использования стандартных контейнеров и прочего, а тут решения лишь с ними и приводят! Почему?

а в чём проблема, всё это можно переписать на чистый C, только сути это не изменит(просто будет больше кода и будет сложнее его понять)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 25.8.2010, 23:07
Сообщение #48


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(AD @ 25.8.2010, 23:46) *
Эдик, я вот одного не понял. Ты поставил условие - без использования стандартных контейнеров и прочего, а тут решения лишь с ними и приводят! Почему?
Да пускай резвятся. Потом покажу как можно и без stl cделать. И так же быстро, если сами не решат сделать. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 26.8.2010, 8:59
Сообщение #49


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(DEADHUNT @ 25.8.2010, 23:50) *
а в чём проблема, всё это можно переписать на чистый C, только сути это не изменит(просто будет больше кода и будет сложнее его понять)

Да в том и проблема, что без использования стандартных средств для красивого и оптимального решения, все это выглядеть будет на чистом С++ (а не С) совсем по-другому! ;) :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 26.8.2010, 11:19
Сообщение #50


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(AD @ 26.8.2010, 9:59) *
все это выглядеть будет на чистом С++ (а не С) совсем по-другому! ;) :)

STL является неотъемлемой частью C++, поэтому тот код и есть чистый C++.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

7 страниц V  « < 3 4 5 6 7 >
Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 13:38