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

Определить количество максимальных элементов в массиве. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти число элементов массива, которые больше своих “соседей” http://www.cyberforum.ru/cpp-beginners/thread345621.html
Найти число элементов массива, которые больше своих “соседей”, т.е. предшествующего и последующего элементов.
C++ Математически описанный алгоритм -> C++ Имеется статья с алгоритмом. В С++ я новичок потому не очень понятно, как все же описать математические термины(см.картинку) и как сделать пересечение множеств(предполагалось использование библ. boost). Кто-нибудь уже сталкивался с написанием алгоритма по научным статьям? http://narod.ru/disk/23000238001/Local%20Optimality%20and%20Its%20Application%20k-claw%20free%20gr.pdf.html http://www.cyberforum.ru/cpp-beginners/thread345593.html
C++ Как тут происходит перестановка байтов...
Вот в книге Шилдта 4-е издание... есть такой пример: #include <iostream> #include <cstdio> #include <cstring> #include <windows.h> using namespace std; union swap_byte
Проблема в стэке C++
Всем Привет! Я делал упражнение на тему стэков, вроде всё сделал, но вылетает какая-то глупая ошибка. Вот код, я думаю, можно не объяснять, что должна делать программа, но если потребуется, объясню. Заголовочный файл с классом: // файл attach.h struct customer { char fullname; double payment; }; typedef customer Item;
C++ Список, стек и очередь. http://www.cyberforum.ru/cpp-beginners/thread345534.html
Файл содержит вещественные числа. Нужно удвоит вхождение всех чисел N. Решить с помощью стека, списка и очереди в С++. Вся информация считывается и выводится в файл, из консоли ничего не считывается и не выводится. Доступ к элементам стека или очереди происходит только с помощью функции извленения элемента из стека или очереди. Помогите пожалуйста!
C++ Возведение в степень n с помощью рекурсии #include<iostream> using namespace std; int funk(int,int); int main () {setlocale(LC_ALL,"Rus"); int a=2,n=5; cout<<funk(a,n); cin.get(); cin.get(); return 0; подробнее

Показать сообщение отдельно
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.09.2011, 21:24     Определить количество максимальных элементов в массиве.
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы берете примитивные ситуации и радуетесь, что работает. Я вас разочарую! Представьте себе, что у вас объект класса содержит указатель на char. А при сравнении элементов используется стандартная функция strcmpТогда использование перегруженного оператора сравнения может привести к непредсказуемым последствием.
Вы мне заявите, что пользователь при определении конструктора по умолчанию должен был инициализировать этот указатель значением NULL. Но что изменится? Произойдет аварийное завершение функции, так как будет обращение к нулевому адресу!
Вы мне снова можете возразить, что пусть пользователь об этом сам позаботится в реализации оператора <. Хорошо. Пользователь позаботился и включил в реализацию этого оператора исключение.
bool operator < ( const T &, const T & ) throw( std::exception );
Вполне грамотный код. Если его объект содержит какие-то не инициализированные данные, то произойдет исключение. Итак, он запускает алгоритм и получает исключение! "Откуда?!!!", - удивится пользователь. Ведь он на вход давал вполне корректные данные.
То есть на сампом деле имеет место, что, образно говоря, вы за его спиной, то есть без его санкции используете объекты, которые пользователь не хотел бы чтобы они использовались.
Другой пример. Я встречал его в бухгалтерии. Там можно было создавать документ с пустыми полями. То есть ни дата, ни номер документа будут неизвестны, пока бухгалтер не заполнит поля документа и не сохранит его в базе. Однако если каким-то случайным образом в базе данных обнаруживался пустой документ, то система его регистрировала в журнале ошибок. То есть при каждой операции, если, вдруг, обнаруживался пустой документ, сразу же регистрировалась такая ситуация, так как этого не должно было быть, потому что этого, как говорят, не могло быть.
Теперь представим использование вашего алгоритма. Выполняется сравнение, и система обнаруживает, что откуда-то появился пустой документ, например, пустая накладная. Система заносит об этом в свой жернал регистрации соответсвующее сообщение, чтобы пользователи потом разобрались, что произошло. И так каждый раз, когда вы будете вызывать этот алгоритм, журнал регистрации будет пополняться сообщениями об ошибке! Мало того, что это может привести к переполнению жернала регистрации ошибок, пользователи вообще могут не понять, из-за чего это сообщение беретсая. А берется оно из-за того, что алгоритм самовольно начинает сравнивать не инициализированный объект с уже имеющимся!
Это вообще плохой дизайн, когда программа делает то, о чем ее не просит пользователь! То есть, как в данном алгоритме, начинает сравнивать не инициализированные объекты.
Много букв и все не по делу. Как это относится к сказанному easybudda? О чем Вы вообще?

Цитата Сообщение от Сыроежка Посмотреть сообщение
Проблема в том, что вы забываете, что эти операторы могут быть перегружены! По крайней мере стандарт этого не запрещает!
Приведите пример когда перегрузка оператора || приведет к тому что тело условного оператора не выполнится:
C++
1
2
3
4
SomeType t;
int count = 0;
if (t > max || 0 == count)
  std::cout << "it works!" << std::endl;
Вот только исключениями бросаться не надо.

Цитата Сообщение от Сыроежка Посмотреть сообщение
bool operator < ( const T &, const T & ) throw( std::exception );
Непустые спецификации исключений уже давно преданы анафеме, статья Герба Саттера по этому поводу.
 
Текущее время: 01:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru