Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Нахождение максимального элемента массива


Автор: Evgesha 5.11.2012, 23:33
Даже в голову не приходит как сделат

Задача такая из одномерного массива надо вибрат 3 или 5 или 18 максималних значений
Зарание спасибо

Автор: volatile 6.11.2012, 00:30
Код
int main ()
{  
   int a [] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 222, -1};  // <=== входной массив, любого размера
   int r [5]; // <=== здесь, размер сколько максимумов нужно

   const int in_size = sizeof a / sizeof a [0];
   const int out_size = sizeof r / sizeof r [0];

   int *end = partial_sort_copy (a, a+in_size, r, r+out_size, std::greater<int>());
   copy (r, end, std::ostream_iterator<int> (std::cout, " "));
   endl (std::cout);
}

http://liveworkspace.org/code/b2f70aae35392472ae373eedaa0889ee


Автор: borisbn 6.11.2012, 17:49
 smile 
Уже минут 15 туплю  smile 

volatile, не подскажете, а как partial_sort_copy, copy и endl работают без std:: ?  smile 

Автор: volatile 6.11.2012, 20:00
borisbn, ща, подождите,  я умный вид сделаю...
smile Итак, 
Цитата(ISO/IEC 14882:2011)

3.4.2 Argument-dependent name lookup
  1.When  the  postfix-expression  in   a   function   call   (5.2.2)   is   an
unqualified-id, other namespaces not considered during  the  usual  unqualified
lookup (3.4.1) may be searched, and in those namespaces, namespace-scope friend
function  declarations  (11.3)  not  otherwise  visible  may  be  found.  These
modifications to the search depend on the  types  of  the  arguments  (and  for
template template arguments, the namespace of the template argument).
Example:
Код

namespace N {
   struct S {};
   void f (S);
}
void g ()
{
   N::S s;
   f (s); // OK: calls N::f
   (f)(s); // error: N::f not considered; parentheses
           // prevent argument-dependent lookup
}


Ну в общем, - ищет по аргументам. Смотрите пример, он весьма чОткий.
Сделано для удобства, какбе, программеров. (они о нас думают!... smile )

Автор: borisbn 6.11.2012, 21:58
volatile, о_О. Век живи век учись... Спасибо. Кажется понял.
Правильно ли ?
Если бы в параметрах partial_sort_copy не было бы std::greater, то компилятор не справился бы..

Кажется правильно - http://liveworkspace.org/code/d2eba8190c03ea325547cb033fb6b8aa

Автор: baldina 6.11.2012, 22:54
borisbn, Вы удивитесь, но простой вызов std::cout << x; был бы без этого невозможен, т.к. operator<<(std::ostream&...) находится в std
см. http://en.wikipedia.org/wiki/Argument-dependent_name_lookup

Автор: volatile 6.11.2012, 23:47
borisbn,  smile совершенно верно.

Вот какие интересные вещи происходят в д'Билдере..
Сомневаюсь кстати, что сие скомпилицца там без пинка.
ТС что-то молчит подозрительно.  smile 

Автор: Evgesha 7.11.2012, 00:45
Спосибо всем но как ето будет виглядет на Builder C++

Простите за невежество но не догону чтото

Автор: volatile 7.11.2012, 00:58
Цитата(Evgesha @  7.11.2012,  00:45 Найти цитируемый пост)
как ето будет виглядет на Builder C++

Evgesha, так и будет.
Должно быть так. По стандарту.
Если нет, сообщите что ему конкретно не нравится.

Автор: baldina 7.11.2012, 01:17
Evgesha, виглядет на Builder C++ оно будед неплохо, так што можеж расслабица и паизучать про http://habrahabr.ru/post/115018/ и http://www.e-reading.org.ua/djvureader.php/136415/263/Bondarev_-_Programmirovanie_na_C%2B%2B.html

но ваще не замарачивайся - сортируй массив и бери 3, 5, 18 первых элементов. не так круто, зато панятно

Автор: Evgesha 8.11.2012, 00:01
Ребята всем огромное спасибо.

Все работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)