Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. verelex

    verelex New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2006
    Сообщения:
    90
    Все разобрался:
    Код (Text):
    1. BOOL CKursListDlg::OnInitDialog()
    2. {
    3.     MyListCtrl = new CMyListCtrl();
    4.     MyListCtrl->SubclassDlgItem(IDC_LIST2,this);
    5.     CDialog::OnInitDialog();
     
  2. dmicarus

    dmicarus New Member

    Публикаций:
    0
    Регистрация:
    25 май 2009
    Сообщения:
    17
    У меня вопрос, как лучше проинициализировать std::map если map, например, в таком формате - std::map<EN, POINT>, где EN - это мой enum, POINT - структура(для простоты просто взял стандартную виндовую точку). Записывать все в столбик инсертами как-то неэстетично :), по-этому решил проинициализировать массивом. С точки зрения "формального" C++шного кода это "нормальный" код? =)

    Код (Text):
    1. enum EN {
    2. First,
    3. Second,
    4. /*.....*/
    5. Last,
    6. };
    7.  
    8. POINT apt[] = {{0,0}, {0,1}, {1,0}/* много точек */};
    9.  
    10. std::map<EN, POINT> mymap;
    11.  
    12. for (int i = First; ( i <= Last) && ( i < sizeof(apt)/sizeof(POINT) ) ; ++i)
    13. {
    14.     mymap[EN(i)].x = apt[i].x ;
    15.     mymap[EN(i)].y = apt[i].y ;
    16. }
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    dmicarus
    Корректен, но вместо оператора - [], лучше insert. Чтобы не разделять фазы создания и инициализации, и не искать элемент повторно.
     
  4. dmicarus

    dmicarus New Member

    Публикаций:
    0
    Регистрация:
    25 май 2009
    Сообщения:
    17
    ^^^EDIT^^^
    Код (Text):
    1. mymap.insert(std::make_pair(EN(i), apt[i]));
    - вместо использования operator [] в теле цикла
     
  5. dmicarus

    dmicarus New Member

    Публикаций:
    0
    Регистрация:
    25 май 2009
    Сообщения:
    17
    Booster
    сам догадался уже =)
     
  6. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    дано 2 вектора одинаковой длины. требуется пробежаться по элементам первого и каждому элементу первого вектора присвоить имя, соответствующее имени текущего элемента второго вектора.
    так норм, или есть лучший вариан?
    Код (Text):
    1. inline param_shared_ptr updateParamsName(const param_shared_ptr the_param, const param_shared_ptr another_param) {
    2.     the_param->setName(another_param->getName());
    3.     return the_param;
    4. }
    5.  
    6. //params_ -- свой вектор элементов. newParams -- полученный вектор элементов.
    7. void updateParams(const params_t newParams) {
    8.             assert(params_.size() == newParams.size());
    9.             std::transform(params_.begin(),
    10.                            params_.end(),
    11.                            newParams.begin(),
    12.                            params_.begin(),
    13.                            boost::bind(&updateParamsName, _1, _2));
    14.         }
    жду комментов. спасибо.
     
  7. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    есть ли в природе стандартный std::vector хранящий элементы всегда отсортированными по заданному бинарному предикату?
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Нету. Что-то вроде этого - http://www.codeproject.com/KB/stl/sorted_vector.aspx
     
  9. dmicarus

    dmicarus New Member

    Публикаций:
    0
    Регистрация:
    25 май 2009
    Сообщения:
    17
    То-ли лыжи не едут, то-ли я...
    Код (Text):
    1. int main(int argc, char *argv[])
    2. {
    3.     try
    4.     {
    5.         throw;
    6.     }
    7.     catch(...)
    8.     {
    9.         ;
    10.     }
    11.     return 0;
    12. }
    MSVS9 выдает
    Unhandled exception at 0x7c812aeb in testcon.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
    причем throw с параметром работает нормально, например throw 1; catch (int) ...
    В чем может быть проблема?
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Оператор throw без выражения генерации исключения генерирует повторное исключение того же типа. Такая форма оператора допустима только внутри секции-ловушки.
    Выполнение этого оператора вне секции-ловушки приведет к немедленному аварийному завершению.
     
  11. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Знаю паскаль и ассемблер на высоком уровне. Посоветуйте, как перейти на С ?
    Чем отличается С от С++. И существует ли таблица структур этих языков и паскаля, например:
    begin = {
    end; = };
    ....?
     
  12. dmicarus

    dmicarus New Member

    Публикаций:
    0
    Регистрация:
    25 май 2009
    Сообщения:
    17
    Booster
    Понятно, спасибо.
    Т.е. throw без параметра в блоке catch сгенерирует это-же исключение, только обработчик будет искать уже на более высоком уровне вложенности.
    ЗЫ
    Дело в том, что в первом же линке выданом гуглом на запрос "исключения C++" в статье пишется, про throw без параметров - Такой метод может применяться в случаях, когда не нужно передавать никаких данных в блок catch. Впредь буду более тщательно подходить к учебным материалам =)
     
  13. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    а разве не все языки похожи. На всех же можно программировать под WinAPI. На Delphi в том числе.
    Поэтому, думаю, от такой таблицы была бы польза.
    Я знаю, что такое структуры (record), указатели на структуры (например, PPoint = ^TPoint), процедуры, функции, методы передачи параметров в них, потоки, дескрипторы и т.д. и т.п... Единственная сложность - так это синтаксис нового языка. Может есть краткий справочник по нему и руководство по компиликованию (как и чем)? Если дадите ссылки, буду премного благодарен.
     
  14. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
  15. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Спасибо, буду изучать.
     
  16. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    slavanap
    по С++ лучше прочитать стандарт С++
    То что "все языки похожи" - не совсем верно. Да, языки могут иметь общие черты, например все языки полные по Тьюрингу могут задавать циклы и ветвления, однако в каждом языке есть нюансы которых нет в других языках. Например в дельфи есть поддержка множеств, "pred:=(x in [a,b,c]);" в языке С++ этого нет, но похожее есть в библиотеке С++, и т.п.. Кроме того разные языки поддерживают разные парадигмы, например в С нет поддержки ООП, в С++ поддержка ООП есть, а в Object C поддержка ООП лучше чем в С++. Так же в С есть метапрограммирование, в С++ его еще больше, а в дельфи вообще нет.
     
  17. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    1. Создать класс для работы с двумерными векторами
    2. Сделать перегрузку операций:
    + - скалярное произведение векторов
    ^ - рассчет модуля вектора
    ==, != - равенство, неравенство векторов
    -- - найти расстояние между 2мя векторами
     
  18. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    а я в классах ноль
    подскажите плиз
     
  19. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    intel_x128
    ^ - бинарный оператор, наверное те нада ^=

    Код (Text):
    1. template<typename T>
    2. class vector2d
    3. {
    4. public:
    5.   typedef T value_t;
    6.   vector2d(T x, T y): x_(x),y_(y) {}
    7. public:
    8.   void x(T value) {x_=value;}
    9.   T x() const {return x;}
    10.   void y(T value) {x_=value;}
    11.   T y() const {return x;}
    12. public:
    13.   template<typename T2>
    14.   T operator+( vector2d<T2>& v2 ) {return /*формула*/}
    15.  
    16.   template<typename T2>
    17.   T operator-( vector2d<T2>& v2 ) {return sqrt( (x()-v2.x())*(x()-v2.x())+(y()-v2.y())*(y()-v2.y()) );}
    18.  
    19.   template<typename T2>
    20.   bool operator==( vector2d<T2>& v2 ) {return (x()==v2.x())&&(y()==v2.y());}
    21.  
    22.   template<typename T2>
    23.   bool operator!=( vector2d<T2>& v2 ) {return !(*this==v2)}
    24. private:
    25.   T x_;
    26.   T y_;
    27. };
    28.  
    29. template<typename T1,typename T2>
    30. T1 operator^=(T1 ,  vector2d<T2>& v) {return sqrt(v.x()*v.x()+v.y()*v.y()}
     
  20. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    * использование
    Код (Text):
    1. vector2d A(1.1,1.3);
    2.  
    3. vector2d<int> B;
    4. B.x(1);
    5. B.y(2);
    6.  
    7. int abs ^= A; //модуль
    8. double r = A-B; // расстояние