Уважаемые. Подскажите пожалуйста идею, задачу и т.д., при решении которой выяснились бы мои реальные знания C++.
Это не для кого-то, а чисто для себя, дабы выяснить сильные и слабые мои стороны.
Заранее благодарен !!!
Здравствуйте, Budri, Вы писали:
B>Уважаемые. Подскажите пожалуйста идею, задачу и т.д., при решении которой выяснились бы мои реальные знания C++. B>Это не для кого-то, а чисто для себя, дабы выяснить сильные и слабые мои стороны. B>Заранее благодарен !!!
Гм... При желании любую решаемую задачу можно выполнить, не используя ООП.
Если поставить дополнительное условие "Оптимально использовать возможности С++", то можно посоветовать следующее:
— Простой векторный редактор
— Класс "очень длинное число" с перегруженными операторами, с помощью которого можно было бы считать выражения с любой степенью точности (ну, в разумных пределах, конечно — главное, чтобы железо справилось .
— Ну и что-нибудь с использованием шаблонов...
Здравствуйте, Budri, Вы писали:
B>Уважаемые. Подскажите пожалуйста идею, задачу и т.д., при решении которой выяснились бы мои реальные знания C++. B>Это не для кого-то, а чисто для себя, дабы выяснить сильные и слабые мои стороны. B>Заранее благодарен !!!
Напиши свои версии std::vector, std::string, std::list, std::map и std::multimap с нуля на чистом С++.
Оптимизируй их и отдебажь.
По сути, имхо, соотношение быстродействия (велосипед / stl ) * 100 и будет как бы процент знаний.
Здравствуйте, ecco, Вы писали: E>Напиши свои версии std::vector, std::string, std::list, std::map и std::multimap с нуля на чистом С++.
Реализация MAP-a не есть знание срр, а скорее знание этого MAP-а
Здравствуйте, Budri, Вы писали:
B>Уважаемые. Подскажите пожалуйста идею, задачу и т.д., при решении которой выяснились бы мои реальные знания C++. B>Это не для кого-то, а чисто для себя, дабы выяснить сильные и слабые мои стороны. B>Заранее благодарен !!!
а зачем тебе это ?? я уже несколько раз видел подобные вопросы, ктото даже компилятор С хотел на С писать не зная языка, но мотивируя тем, что тем самым он "познает все его глубины" имхо лучше бы он написал реверсионный анализ из ассемблера в С
а если просто нечего делать — возьми пива с деффками, как рукой снимет подобное желание
AlikGut, ICQ# 337311300
Muzix: Алексин — ОдеялоБудьте проще, и к вам потянуться тысячи. (С) Монетный двор РФ.
Здравствуйте, Sergey_BG, Вы писали:
S_B>Реализация MAP-a не есть знание срр, а скорее знание этого MAP-а
То есть вы считаете, что зная интерфейс std::map вы без особых знаний C++ реализуете велосипед, который по скорости и безопасности сравним c std::map (например из комплекта VC7.1)?
Позвольте не согласиться. Я считаю что для реализации максимально эффективного шаблонного класса map необходимо иметь довольно глубокие знания как C++ так и алгоритмов поиска.
Здравствуйте, ecco, Вы писали:
E>То есть вы считаете, что зная интерфейс std::map вы без особых знаний C++ реализуете велосипед, который по скорости и безопасности сравним c std::map (например из комплекта VC7.1)? E>Позвольте не согласиться. Я считаю что для реализации максимально эффективного шаблонного класса map необходимо иметь довольно глубокие знания как C++ так и алгоритмов поиска.
В том то и проблема, что глубокие знания C++ => эффективная реализация map, правда тоже с поправкой на то, что человек разбирается хотя бы в теории сложности алгоритмов.
Но вот обратно из того, что человек сможет реализовать map знания C++ не следуют, слишком уж это узкоспециализированный вопрос — алгоритмы и их эффективность на C++.
Ни тебе исключений, ни тебе полиморфизма и многих многих других фишек C++. На то он и универсальнай язык.
А человек хочет выяснить свои сильные и слабые стороны — так он узнает только одну из них.
Здравствуйте, gbt, Вы писали:
gbt>Но вот обратно из того, что человек сможет реализовать map знания C++ не следуют, слишком уж это узкоспециализированный вопрос — алгоритмы и их эффективность на C++.
Зато тут проявятся знания шаблонов и различных трюков, реализуемых с помощью шаблонов.
К тому же одним из первичного в программировании я считаю знания алгоритмов, а также умение организовывать структуры данных и их обработку.
Голое знание C++ имхо никому ещё полезно не было.
gbt>Ни тебе исключений, ни тебе полиморфизма и многих многих других фишек C++. На то он и универсальнай язык. gbt>А человек хочет выяснить свои сильные и слабые стороны — так он узнает только одну из них.
Согласен.
Предлагаю тогда написать свой полностью ОО GUI library наподобие Qt, тока попроще, но с системой сообщений или с системой событий и их обработчиков.
По себе знаю: это очень увлекательно.
Sergey_BG,
> E>Напиши свои версии std::vector, std::string, std::list, std::map и std::multimap с нуля на чистом С++.
> Реализация MAP-a не есть знание срр, а скорее знание этого MAP-а
Ну почему же... Местами там есть вполне интересные (с точки зрения знания C++) моменты. Например:
23.1.1 Sequences
9 For every sequence defined in this clause and in clause 21:
10 [Note: This follows directly from the requirements in the Iterator Requirements Table. Integral types cannot be iterators, so, if n1 and n2 are values of an integral type N, the expression X(n1, n2) cannot possibly be interpreted as construction from a range of iterators. It must be taken to mean the first constructor in the Iterator Requirements Table, not the second one. If there is no conversion from N to X::value_type, then this is not a valid expression at all.
11 One way that sequence implementors can satisfy this requirement is to specialize the member template for every integral type. Less cumbersome implementation techniques also exist. —end note] [Example:
list<int> x;
...
vector<int> y(x.begin(), x.end()); // Construct a vector
// from a range of iterators.
vector<int> z(100, 1); // Construct a vector of 100
// elements, all initialized
// to 1. The arguments are
// not interpreted as iterators.
z.insert(z.begin(), x.begin(), x.end()); // Insert a range of
// iterators.
z.insert(z.begin(), 20, 0); // Insert 20 copies of the
// number 0.
—end example]
Попытки найти "less cumbersome implementation techniques" приведут к вполне хорошей проверке некоторых не самых тривиальных аспектов знания C++.
Т.е. задача, с точки зрения языка, сводится к следующему. Есть две функции:
template <class T>
void f(T);
void f(int);
Сделать так, чтоб вызов первой с аргументом интегрального типа приводил к вызову второй.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
А какие трюки, реализуемые с помощью шаблонов, реализованны в std::map?
E>Зато тут проявятся знания шаблонов и различных трюков, реализуемых с помощью шаблонов.
Не все в этом мире можно выразить с помощью нулей и единиц...