Помогите неопытному
От: Budri  
Дата: 14.07.05 11:21
Оценка: 1 (1)
Уважаемые. Подскажите пожалуйста идею, задачу и т.д., при решении которой выяснились бы мои реальные знания C++.
Это не для кого-то, а чисто для себя, дабы выяснить сильные и слабые мои стороны.
Заранее благодарен !!!
Re: Помогите неопытному
От: Algorithmus Украина  
Дата: 14.07.05 11:31
Оценка:
Здравствуйте, Budri, Вы писали:

B>Уважаемые. Подскажите пожалуйста идею, задачу и т.д., при решении которой выяснились бы мои реальные знания C++.

B>Это не для кого-то, а чисто для себя, дабы выяснить сильные и слабые мои стороны.
B>Заранее благодарен !!!

Гм... При желании любую решаемую задачу можно выполнить, не используя ООП.
Если поставить дополнительное условие "Оптимально использовать возможности С++", то можно посоветовать следующее:
— Простой векторный редактор
— Класс "очень длинное число" с перегруженными операторами, с помощью которого можно было бы считать выражения с любой степенью точности (ну, в разумных пределах, конечно — главное, чтобы железо справилось .
— Ну и что-нибудь с использованием шаблонов...
Re: Помогите неопытному
От: ecco Россия  
Дата: 14.07.05 12:10
Оценка:
Здравствуйте, Budri, Вы писали:

B>Уважаемые. Подскажите пожалуйста идею, задачу и т.д., при решении которой выяснились бы мои реальные знания C++.

B>Это не для кого-то, а чисто для себя, дабы выяснить сильные и слабые мои стороны.
B>Заранее благодарен !!!

Напиши свои версии std::vector, std::string, std::list, std::map и std::multimap с нуля на чистом С++.
Оптимизируй их и отдебажь.
По сути, имхо, соотношение быстродействия (велосипед / stl ) * 100 и будет как бы процент знаний.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[2]: Помогите неопытному
От: Sergey_BG Россия  
Дата: 14.07.05 12:41
Оценка:
Здравствуйте, ecco, Вы писали:
E>Напиши свои версии std::vector, std::string, std::list, std::map и std::multimap с нуля на чистом С++.
Реализация MAP-a не есть знание срр, а скорее знание этого MAP-а
Сергей
Re: Помогите неопытному
От: AlikGut  
Дата: 14.07.05 13:12
Оценка: :)
Здравствуйте, Budri, Вы писали:

B>Уважаемые. Подскажите пожалуйста идею, задачу и т.д., при решении которой выяснились бы мои реальные знания C++.

B>Это не для кого-то, а чисто для себя, дабы выяснить сильные и слабые мои стороны.
B>Заранее благодарен !!!

а зачем тебе это ?? я уже несколько раз видел подобные вопросы, ктото даже компилятор С хотел на С писать не зная языка, но мотивируя тем, что тем самым он "познает все его глубины" имхо лучше бы он написал реверсионный анализ из ассемблера в С

а если просто нечего делать — возьми пива с деффками, как рукой снимет подобное желание

AlikGut, ICQ# 337311300


Muzix: Алексин — Одеяло
Будьте проще, и к вам потянуться тысячи. (С) Монетный двор РФ.

Re[3]: Помогите неопытному
От: ecco Россия  
Дата: 14.07.05 13:25
Оценка:
Здравствуйте, Sergey_BG, Вы писали:

S_B>Реализация MAP-a не есть знание срр, а скорее знание этого MAP-а

То есть вы считаете, что зная интерфейс std::map вы без особых знаний C++ реализуете велосипед, который по скорости и безопасности сравним c std::map (например из комплекта VC7.1)?

Позвольте не согласиться. Я считаю что для реализации максимально эффективного шаблонного класса map необходимо иметь довольно глубокие знания как C++ так и алгоритмов поиска.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[4]: Помогите неопытному
От: gbt Россия  
Дата: 14.07.05 13:50
Оценка: +1
Здравствуйте, ecco, Вы писали:

E>То есть вы считаете, что зная интерфейс std::map вы без особых знаний C++ реализуете велосипед, который по скорости и безопасности сравним c std::map (например из комплекта VC7.1)?

E>Позвольте не согласиться. Я считаю что для реализации максимально эффективного шаблонного класса map необходимо иметь довольно глубокие знания как C++ так и алгоритмов поиска.
В том то и проблема, что глубокие знания C++ => эффективная реализация map, правда тоже с поправкой на то, что человек разбирается хотя бы в теории сложности алгоритмов.
Но вот обратно из того, что человек сможет реализовать map знания C++ не следуют, слишком уж это узкоспециализированный вопрос — алгоритмы и их эффективность на C++.
Ни тебе исключений, ни тебе полиморфизма и многих многих других фишек C++. На то он и универсальнай язык.
А человек хочет выяснить свои сильные и слабые стороны — так он узнает только одну из них.

P.S. IMHO.
Re[5]: Помогите неопытному
От: ecco Россия  
Дата: 14.07.05 14:56
Оценка: +1
Здравствуйте, gbt, Вы писали:

gbt>Но вот обратно из того, что человек сможет реализовать map знания C++ не следуют, слишком уж это узкоспециализированный вопрос — алгоритмы и их эффективность на C++.

Зато тут проявятся знания шаблонов и различных трюков, реализуемых с помощью шаблонов.
К тому же одним из первичного в программировании я считаю знания алгоритмов, а также умение организовывать структуры данных и их обработку.
Голое знание C++ имхо никому ещё полезно не было.

gbt>Ни тебе исключений, ни тебе полиморфизма и многих многих других фишек C++. На то он и универсальнай язык.

gbt>А человек хочет выяснить свои сильные и слабые стороны — так он узнает только одну из них.
Согласен.
Предлагаю тогда написать свой полностью ОО GUI library наподобие Qt, тока попроще, но с системой сообщений или с системой событий и их обработчиков.
По себе знаю: это очень увлекательно.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[3]: Помогите неопытному
От: Павел Кузнецов  
Дата: 14.07.05 23:03
Оценка:
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:

— the constructor

template <class InputIterator>
X(InputIterator f, InputIterator l, const Allocator& a = Allocator())

shall have the same effect as:
X(static_cast<typename X::size_type>(f),
   static_cast<typename X::value_type>(l),
   a)

if InputIterator is an integral type.

— the member functions in the forms:
template <class InputIterator> // such as insert()
rt fx1(iterator p, InputIterator f, InputIterator l);

template <class InputIterator> // such as append(), assign()
rt fx2(InputIterator f, InputIterator l);

template <class InputIterator> // such as replace()
rt fx3(iterator i1, iterator i2, InputIterator f, InputIterator l);

shall have the same effect, respectively, as:
fx1(p,
     static_cast<typename X::size_type>(f),
     static_cast<typename X::value_type>(l));

fx2(static_cast<typename X::size_type>(f),
     static_cast<typename X::value_type>(l));

fx3(i1, i2,
     static_cast<typename X::size_type>(f),
     static_cast<typename X::value_type>(l));

if InputIterator is an integral type.

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
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[6]: Помогите неопытному
От: Evgeniy13 Россия  
Дата: 15.07.05 16:44
Оценка:
А какие трюки, реализуемые с помощью шаблонов, реализованны в std::map?

E>Зато тут проявятся знания шаблонов и различных трюков, реализуемых с помощью шаблонов.
Не все в этом мире можно выразить с помощью нулей и единиц...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.