Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    SaDFromSpb



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    STL Степанова ?! Так что же, стандартную STL, получается, сделал "простой советский паренек"?!

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 12:39 09-08-2006
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SaDFromSpb
    Ну этот простой паренек уже давно работает не "в союзе" но к С++ это мало относится.
    По поводу map vs array по собственному опыту могу сказать, что как ни крути, какие MMX не используй, быстрее косвенной только прямая адресация. Правда, помнится, была загадочная для меня команда ассемблера XLAT, но не думаю, что она работает быстрее косвенной адресации.
    Остаются вопросы только в том, что у некоторых "продвинутых" программистов могут возникать заморочки с вычислением индексов массивов. То есть, время, требуемое для вычисления индекса может вполне быть сравнимым со временем прохода по дереву в map (а оно, кажись, на балансированных деревьях сделано). Отсюда и может возникать это "ощущение" той же скорости.
    Прошу не воспринимать этот пост ни в чей адрес. Написано про абстрактных программистов, в т.ч. и про себя. Просто, проверьте выражение в квадратных скобках

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 14:36 09-08-2006
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Intel оставила XLAT в системе команд 8086 для совместимости с 8085. Как и LAHF/SAHF.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 15:09 10-08-2006
    ivanmara



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите что можно использовать для так называемого словаря. Есть масив структур пара: слово перевод ... необходимо получать быстрый перевод того или иного слова, что то типа функции translate("horse") которая вернёт на русском "лошадь". Естестевнно набор данных для словаря будет подготовлен заранее. Наверняка это уже кто реализовывал ?

    Всего записей: 520 | Зарегистр. 23-06-2006 | Отправлено: 01:39 14-08-2006
    Vladimir_Pashutin

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ivanmara
    А чем map<string> не устраивает?

    Всего записей: 70 | Зарегистр. 14-05-2003 | Отправлено: 06:50 14-08-2006
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ivanmara
    В дополнение к Vladimir_Pashutin
    Надо только еще реализовать case insensitive поиск по строке.
     
    Подход через map очень удобен в случае, если нужно однозначное отображение "английское слово"->"русское слово". Если у исходного слова возможны различные формы все существенно усложняется. Тогда надо реализовывать анализатор, который бы приводил слова к каноническому виду.

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 07:43 14-08-2006
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mickey_from_nsk
    Изначально вопрос был задан об однозначном переводе: "что то типа функции translate("horse") которая вернёт на русском "лошадь""
    Но в принципе, так как слово может иметь несколько переводов, можно сделать что-то типа map<string,vector<string>>, тогда возвращаться будет список возможных переводов заданного слова. А case-insensitive-поиск с мапой вообще не проблема, получится что-то в этом роде:

    Код:
     
    struct compare_t
    {
      bool operator()(const string s1, const string s2) const
      {
        return strcasecmp(s1.c_str(), s2.c_str());
      }
    };
     
    map <string,vector<string>,compare_t> vocabulary;
     
     

    Где strcasecmp заменяется на подходящу функцию, в зависимости от платформы (на stricmp, например).

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 18:40 14-08-2006
    Jim_Web

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как проверить выделена ли память для указателя на класс ?
    Данный вариант не проходит.

    Код:
     
    SomeClass * sc;
    if (!sc)
        sc = new SomeClass();
     

    Всего записей: 38 | Зарегистр. 22-07-2005 | Отправлено: 02:24 15-08-2006
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jim_Web
    Дык инициализировать его надо сначала в NULL:

    Код:
     
    SomeClass * sc=NULL;  
    if (!sc)  
        sc = new SomeClass();  
     
     

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 02:28 15-08-2006
    SPlyer



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    Дык инициализировать его надо сначала в NULL:  

    А без инициализации никак нельзя?

    Всего записей: 240 | Зарегистр. 06-06-2004 | Отправлено: 02:41 15-08-2006
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SPlyer
    Нет, иначе указатель будет ненулевой (т.е. !sc будет true), но указывать будет х.з. куда, на случайный участок памяти.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 02:50 15-08-2006
    SPlyer



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Кстати, вместо NULL лучше использовать просто 0.

    Всего записей: 240 | Зарегистр. 06-06-2004 | Отправлено: 02:53 15-08-2006
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не факт. Некоторые компиляторы этого просто могут не понять, и будут ругаться на несоответствие типов. Хотя, я чаще использую именно 0, так как не включаю стантартные .h, где описывается NULL.

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 03:01 15-08-2006
    SPlyer



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    Не факт. Некоторые компиляторы этого просто могут не понять, и будут ругаться на несоответствие типов. Хотя, я чаще использую именно 0, так как не включаю стантартные .h, где описывается NULL.

    Это только в старых C компиляторах, в С++ лучше пользоваться 0 и проблем с этим не возникнет.

    Всего записей: 240 | Зарегистр. 06-06-2004 | Отправлено: 03:13 15-08-2006
    xdude



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SPlyer
    А чем именно лучше? Меня всегда этот вопрос мучал: что лучше, 0 или NULL

    Всего записей: 481 | Зарегистр. 04-11-2004 | Отправлено: 03:19 15-08-2006
    SPlyer



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Например в некоторых случаях, когда требуется константа при использовании NULL могут возникнуть проблемы, так как в C++ более строгая типизация чем в C. Использование 0 вместо NULL в C++ это как "внегласное соглашение", но разницы в использовании NULL или 0 с указателями никакой нет.
    В C NULL определен как ((void*)0), т.к его подразумевалось использовать только с указателями, поэтому эсли NULL в C использовать например с int'ом компилятор будет ругаться.

    Всего записей: 240 | Зарегистр. 06-06-2004 | Отправлено: 03:50 15-08-2006
    Mickey_from_nsk

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SPlyer

    Цитата:
    Кстати, вместо NULL лучше использовать просто 0.

    А чем лучше? В смысле типизации, что ли? То есть мы, засандаливая в указатель целое число говорим, что лучше типизируем? Не, понятно, что компилятор разрулит это, но зачем оно надо? Если NULL это уже указатель?
    С моей т.з., использование NULL показывает явно, что дело мы имеем с указателем.

    Цитата:
    А без инициализации никак нельзя?

    Лучше привыкать сразу все переменные инициализировать, хотя бы NULL-значением. Проще будет в отладке - assert можно будет выставлять и т.д.

    Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 07:18 15-08-2006
    FireZone

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Существует ли чисто плюсовой аналог микрософтовской конструкции __try - __finally?
    Или как проще записать на чистом C++ нижеследующее:
    Код:
    занять ресурс;
    __try{
      ..
      if (...) return;
      ..
      throw ...
      ...
      if (...) return;
      ..}
    __finally{
      освободить ресурс;
    }
    Т.е, нужно гарантированное освобождение ресурса при любом способе выхода из функции. Неужели нужно перед каждым return и throw ручками прописывать освобождение ресурса?

    Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 09:16 15-08-2006
    vshersh



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FireZone
    Можно использовать "умные указатели"...

    Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 09:44 15-08-2006
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FireZone
    выделение ресурса есть инициализация (Б.Страуструп)
     
     
    struct RcHelper
    {
    RcHelper()
    {
    // выделить ресурс
    }
     
    ~RcHelper()
    {
    // освободить ресурс
    }
    }
     
    работа с ресурсом:
     
    {
    RcHelper save_state; // захватываем ресурс
    ....
    if (...) return;  
      ..  
    throw ...  
      ...  
    if (...) return;  
     
     
    }// здесь отработает деструктор и освободит ресурс
     
    естественно это только пример. RcHelper - только пример.
    вместо него можно юзать boost::shared_ptr или подобных
     
    основное - идея, что выделение ресурса есть инициализация.

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 09:56 15-08-2006
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru