Вопросы с тегами [c]

22.3k

голосов
22

ответ
1.3m

Просмотры

Почему быстрее обрабатывать отсортированный массив, чем несортированный массив?

Вот кусок кода C ++, который кажется очень странным. По какой-то странной причине, сортировка данных чудесным образом делает код почти в шесть раз быстрее. # include # include # include INT основных () {// Генерация сопзИте данные без знака ArraySize = 32768; INT данные [ArraySize]; для (без знака с = 0; с <ArraySize; ++) данные [с] = станд :: Rand ()% 256; // !!! При этом, следующий цикл выполняется быстрее станд :: сортировать (данные, данные + ARRAYSIZE); // Тест clock_t начать = часы (); долго долго сумма = 0; для (без знака = 0; г <100000; ++ я) {// Первичный цикл для (без знака С = 0, С <ArraySize; C ++) {если (данные [с]> = 128) сумма + = данных [с]; }} Двойная ElapsedTime = static_cast (часы () - старт) / CLOCKS_PER_SEC; станд :: соиЬ
GManNickG
8k

голосов
21

ответ
648.3k

Просмотры

Что такое - оператор в C ++ «>»?

После прочтения скрытых объектов и темные углы C ++ / STL на comp.lang.c ++. Замедлителем, я был совершенно удивлен тем, что следующий фрагмент скомпилирован и работал как в Visual Studio 2008 и G ++ 4.4. Вот код: #include INT основных () {INT х = 10; в то время как (х -> 0) // х переходит в 0 {Е ( "% D", х); }} Я полагаю, что это C, так как он работает в НКУ, а также. Где это определено в стандарте, и где оно взялось?
5.6k

голосов
30

ответ
919.3k

Просмотры

В чем разница между String, и строки в C #?

Пример (обратите внимание на регистр): строка s =; «Привет, мир!» Строка s = "Привет мир!"; Каковы рекомендации по использованию каждого из них? А в чем разница?
4.2k

голосов
1

ответ
2.1m

Просмотры

Полное руководство и список C ++ книги

Этот вопрос пытается собрать несколько жемчужин среди десятков плохих книг C ++, которые публикуются каждый год. В отличие от многих других языков программирования, которые часто забирали на ходу из учебников, найденных в Интернете, немногие из них способны быстро подобрать C ++ без изучения хорошо написанный C ++ книгу. Это слишком большой и сложный для этого. На самом деле, это является настолько большим и сложным, что есть очень много очень плохая C ++ книги там. И мы не говорим о плохом стиле, но такие вещи, как спортивные вопиюще очевидные фактические ошибки и продвижение плачевно плохих стилей программирования. Пожалуйста, измените принятый ответ, чтобы обеспечить качественные книги и примерный уровень квалификации - желательно после обсуждения вашего добавлений в C ++ чате. (Завсегдатаи могут безжалостно уничтожить вашу работу, если они не согласны с рекомендацией. ) Добавить краткое описание / объявления об о каждой книге, которую вы лично прочитать / выгоду от. Не стесняйтесь обсуждать качество, заголовки и т.д. Книги, которые отвечают критериям, будут добавлены в список. Книги, которые имеют обзоры Ассоциация пользователей С и С ++ (ACCU) есть ссылки на обзор. * Примечание: часто задаваемые вопросы и другие ресурсы могут быть найдены в C ++ информации тегов и под C ++ - FAQ.
3.3k

голосов
26

ответ
639.9k

Просмотры

Как перечислить перечисление в C #?

Как вы можете перечислить перечисление в C #? Например, следующий код не компилируется: общественная перечислимая костюм {Spades, сердце, трефы, бубны} общественного недействительный EnumerateAllSuitsDemoMethod () {Еогеасп (костюм костюм в костюме) {DoSomething (костюм); }} И дает следующее сообщение об ошибке во время компиляции: «Костюм» является «тип», но используется как «переменная» Это не будет работать на Suit ключевого слова, второй.
Ian Boyd
2.9k

голосов
30

ответ
886.6k

Просмотры

What are the differences between a pointer variable and a reference variable in C++?

Я знаю, что ссылки являются синтаксический сахар, поэтому код легче читать и писать. Но каковы различия? Резюме от ответов и ссылок ниже: Указатель может быть повторно назначено любое количество раз, в то время как ссылка не может быть повторно назначен после связывания. Указатели не могут указывать нигде (NULL), в то время как ссылка всегда относится к объекту. Вы не можете взять адрес ссылки, как вы можете с указателями. Там нет «ссылка арифметика» (но вы можете взять адрес объекта, на который указывает ссылка, и делать арифметические операции над указателями на нем, как и в & OBJ + 5). Для уточнения недопонимания: стандарт C ++ очень осторожный, чтобы не диктовал, как компилятор может осуществлять ссылки, но каждый компилятор C ++ реализует ссылки как указатели. То есть, заявление, такие как: междунар & п = я; если он не оптимизирован прочь полностью, выделяет один и тот же объем памяти, как указатель, и помещает адрес I в это хранилище. Таким образом, указатель и ссылка оба используют один и тот же объем памяти. Как правило, использовать ссылки в параметрах функции и возвращаемые типы, чтобы обеспечить полезные и самодокументирован интерфейсы. Использование указателей для реализации алгоритмов и структур данных. Интересно читать: Мой самый любимый C ++ FAQ облегченный. Ссылки против указателей. Введение в справочную литературу. Ссылки и Конст. Мой самый любимый C ++ FAQ облегченный. Ссылки против указателей. Введение в справочную литературу. Ссылки и Конст. Мой самый любимый C ++ FAQ облегченный. Ссылки против указателей. Введение в справочную литературу. Ссылки и Конст.
prakash
2.8k

голосов
30

ответ
2.1m

Просмотры

Как перебирать слова строки?

Я пытаюсь перебирать слова строки. Строку можно предположить, будет состоять из слов, разделенных пробелами. Обратите внимание, что я не заинтересован в функциях строки C или такого рода манипуляции символов / доступа. Кроме того, пожалуйста, дайте предпочтение элегантности над эффективностью в своем ответе. Лучшее решение я прямо сейчас: #include #include #include с помощью патезрасе; INT основных () {строка s = "Где-то вниз по дороге"; istringstream ISS (с); делать {строка подлодки; ISS >> подводные лодки; соиЬ
2.7k

голосов
22

ответ
1.1m

Просмотры

Cast ИНТ на перечисление в C #

Как может ИНТ быть приведен к типу перечисления в C #?
lomaxx
2.7k

голосов
9

ответ
355.2k

Просмотры

Улучшение ВСТАВИТЬ в секунду производительность SQLite?

Оптимизация SQLite сложно. Объемная производительность-вставка из приложения C может варьироваться от 85 вставок в секунду до более чем 96000 вставок в секунду! Справочная информация: Мы используем SQLite в качестве части настольного приложения. У нас есть большое количество конфигурационных данных, хранящихся в файлах XML, которые разобраны и загружены в базу данных SQLite для дальнейшей обработки при инициализации приложения. SQLite идеально подходит для этой ситуации, потому что она быстро, это требует никакого специализированного конфигурации и базы данных хранятся на диске в виде отдельного файла. Обоснование: Изначально я был разочарован выступлением я видел. Получается, что производительность SQLite может значительно отличаться (как для объемных вставок и выбирает), в зависимости от конфигурации базы данных и как вы используете API. Это не тривиальный вопрос, чтобы понять, что все варианты и методы были, поэтому я счел благоразумным, чтобы создать эту запись сообщества вики, чтобы поделиться результатами с читателями переполнению стека для того, чтобы спасти других неприятностей тех же исследований. Эксперимент: Вместо того, чтобы просто говорить о советах по повышению эффективности в общем смысле (то есть «! Используйте транзакцию»), я подумал, что лучше всего, чтобы написать некоторые C код и фактически измеряет влияние различных вариантов. Мы собираемся начать с некоторых простых данных: с разделителями табуляцией текстовый файл 28 МБ (около 865000 записей) из полного графика транзита для города Торонто Моя тестовая машина 3,60 ГГц P4 бегущий Windows XP. Код компилируется с Visual C ++ 2005 как "Release" с "полной оптимизации" (/ Ox) и благосклонности Fast Code (/ Ot). Я' м с использованием SQLite «Адепт», составленное непосредственно в моем тестовом приложении. Версия SQLite я, случается, есть немного старше (3.6.7), но я подозреваю, что эти результаты будут сопоставимы с последней версией (пожалуйста, оставьте комментарий, если вы думаете, в противном случае). Давайте писать код! Код: простой C программа, которая считывает текстовый файл строку за строкой, разбивает строку в значение и затем вставляют данные в базу данных SQLite. В этой «базовой» версии кода, база данных создана, но мы не будем на самом деле вставить данные: / ************************* ************************************ Базовый код для экспериментов с SQLite производительности. Ввод данных является 28 MB TAB-текстовый файл с разделителями полного расписания Toronto Transit System Информация / маршрута от Http: //www.toronto. CA / открытые / наборы данных / TTC-маршруты / **************************************** ********************** / # include # include # include # include # include "sqlite3.h" #define INPUTDATA «C: \\ TTC_schedule_scheduleitem_10-27- 2009.txt "#define DATABASE "C: \\ TTC_schedule_scheduleitem_10-27-2009.sqlite" #define TABLE" CREATE TABLE IF NOT EXISTS TTC (ID INTEGER PRIMARY KEY, Route_ID TEXT, Branch_Code TEXT, версия INTEGER, Stop INTEGER, Vehicle_Index INTEGER День Integer, время TEXT)»#define buffer_size 256 Int основной (INT ARGC, символ ** ARGV) {sqlite3 * дб; sqlite3_stmt * STMT; символ * sErrMsg = 0; символ * хвост = 0; INT nRetCode; Int N = 0; clock_t cStartClock; FILE * Pfile; символ sInputBuf [BUFFER_SIZE] = "\ 0"; символ * SRT = 0; / * Маршрут * / символ * SBR = 0; / * Отрасль * / символ * SVR = 0; / * Версия * / символ * SST = 0; / * Stop Number * / символ * SVI = 0; / * Автомобиль * / символ * SDT = 0; / * Дата * / символ * СтМ = 0; / * Время * / символ sSQL [BUFFER_SIZE] = "\ 0"; /*********************************************/ /* Открыто База данных и создания схемы * / sqlite3_open (БАЗ, & дб); sqlite3_exec (дБ, ТАБЛИЦА, NULL, NULL, & sErrMsg); /*********************************************/ /* Открыто входной файл и импортировать в базу данных * / cStartClock = часы (); Pfile = Еореп (INPUTDATA, "г"); в то время как {fgets (sInputBuf, BUFFER_SIZE, Pfile) (feof (Pfile)!); SRT = strtok (sInputBuf, "\ т"); / * Получить Маршрут * / SBR = strtok (NULL, "\ т"); / * Получить Отрасль * / SVR = strtok (NULL, " 000 вставок в секунду, если мы на самом деле не делать никаких вставок :-) The «наихудшим-сценарий» Мы собираемся сформировать строку SQL, используя значения, считываемые из файла и вызвать эту операцию SQL с помощью sqlite3_exec: Sprintf (sSQL, "INSERT INTO TTC VALUES (NULL, '% s', '% s', '% s', '% s', '% s', '% s', '% s')", SRT, SBR, SVR, SST, SVI, SDT, СтМ); sqlite3_exec (дБ, sSQL, NULL, NULL, & sErrMsg); Это будет медленным, поскольку SQL будет скомпилирован в VDBE код для каждой вставки и каждой вставки будет происходить в своей собственной транзакции. Как медленно? Импортные 864913 записей в 9933.61 секунд Хлоп! 2 часа и 45 минут! Это только 85 вставок в секунду. Использование транзакции По умолчанию, SQLite будет оценивать каждый INSERT / UPDATE заявление в рамках единой сделки. При выполнении большого количества вставок, желательно обернуть операцию в транзакции: sqlite3_exec (дб, «BEGIN TRANSACTION», NULL, NULL, & sErrMsg); Pfile = Еореп (INPUTDATA, "г"); в то время как {...} fclose (Pfile) (feof (Pfile)!); sqlite3_exec (дБ, "КОНЕЦ ОПЕРАЦИИ", NULL, NULL, & sErrMsg); Импортные 864913 записей в 38,03 секунды, что это лучше. Просто оборачивать все наши вставки в одной транзакции улучшила производительность 23000 вставок в секунду. Использование подготовленного заявления с помощью транзакции был огромный шаг вперед, но перекомпиляции заявления SQL для каждой вставка не имеет смысла, если мы используем тот же SQL над-и-над. Позволять' s использование sqlite3_prepare_v2 скомпилировать наш SQL заявление один раз, а затем связать наши параметры это заявление с помощью sqlite3_bind_text: * Открыть файл и импорт / ввод в базу данных * / cStartClock = часы (); Sprintf (sSQL, "INSERT INTO TTC значения (NULL, @RT, @BR, @VR, @ST, @VI, @DT, @TM)"); sqlite3_prepare_v2 (дБ, sSQL, BUFFER_SIZE, & STMT, & хвост); sqlite3_exec (дБ, "BEGIN TRANSACTION", NULL, NULL, & sErrMsg); Pfile = Еореп (INPUTDATA, "г"); в то время как {fgets (sInputBuf, BUFFER_SIZE, Pfile) (feof (Pfile)!); SRT = strtok (sInputBuf, "\ т"); / * Получить Маршрут * / SBR = strtok (NULL, "\ т"); / * Получить Отрасль * / SVR = strtok (NULL, "\ т"); / * Получить версии * / SST = strtok (NULL, "\ т"); / * Получить Стоп Номер * / SVI = strtok (NULL, "\ т"); / * Получить Автомобиль * / SDT = strtok (NULL, "\ т"); / * Получить Дата * / СтМ = strtok (NULL, "\ т"); / * Получить Time * / sqlite3_bind_text (STMT, 1, SRT, -1, SQLITE_TRANSIENT); sqlite3_bind_text (STMT, 2, SBR, -1, SQLITE_TRANSIENT); sqlite3_bind_text (STMT, 3, SVR, -1, SQLITE_TRANSIENT); sqlite3_bind_text (STMT, 4, SST, -1, SQLITE_TRANSIENT); sqlite3_bind_text (STMT, 5, SVI, -1, SQLITE_TRANSIENT); sqlite3_bind_text (STMT, 6, SDT, -1, SQLITE_TRANSIENT); sqlite3_bind_text (STMT, 7, СтМ, -1, SQLITE_TRANSIENT); sqlite3_step (STMT); sqlite3_clear_bindings (STMT); sqlite3_reset (STMT); п ++; } Fclose (Pfile); sqlite3_exec (дБ, "КОНЕЦ ОПЕРАЦИИ", NULL, NULL, & sErrMsg); Е ( "Импортные% D записи в% 4.2f секунд \ п", п, (Часы () - cStartClock) / (двойной) CLOCKS_PER_SEC); sqlite3_finalize (STMT); sqlite3_close (дБ); возвращать 0; Импортные 864913 записей в 16.27 секунд Ницца! Там есть немного больше кода (не забудьте позвонить sqlite3_clear_bindings и sqlite3_reset), но мы более чем удвоили производительность до 53000 вставок в секунду. ПРАГМА синхронное = OFF По умолчанию SQLite будет пауза после выдачи команды записи на уровне ОС. Это гарантирует, что данные записываются на диск. Установив синхронное = OFF, мы поручаем SQLite просто передать отключение данных в ОС для записи, а затем продолжить. Там есть шанс, что файл база данных может быть поврежден, если компьютер страдает катастрофическую аварией (или сбой питания) до того, как данные записываются на жесткий диск: / * Откройте базу данных и создать схему * / sqlite3_open (БАЗ, & ДБ); sqlite3_exec (дБ, ТАБЛИЦА, NULL, NULL, & sErrMsg); sqlite3_exec (дБ, "ПРАГМА синхронное = ВЫКЛ", NULL, NULL, & sErrMsg); Импортные 864913 записей в 12.41 секунд Улучшения теперь меньше, но мы до 69,600 вставки в секунду. ПРАГМА journal_mode = ПАМЯТЬ Рассмотрим хранения журнала отката в памяти путем оценки PRAGMA journal_mode = ПАМЯТЬ. Ваша сделка будет быстрее, но если вы потеряете власть или ваши программные сбои во время операции вы база данных могут быть оставлены в коррумпированном государстве с частично завершенной транзакцией: / * Откройте базу данных и создать схемы * / sqlite3_open (БАЗ, и дб ); sqlite3_exec (дБ, ТАБЛИЦА, NULL, NULL, & sErrMsg); sqlite3_exec (дБ, "ПРАГМА journal_mode = ПАМЯТЬ", NULL, NULL, & sErrMsg); Импортные 864913 записей в 13. 50 секунд немного медленнее, чем в предыдущей оптимизации при 64000 вставках в секунду. ПРАГМА синхронный = OFF и ПРАГМА journal_mode = MEMORY Давайте объединить два предыдущие оптимизации. Это немного более рискованными (в случае аварии), но мы просто импортировать данные (не работает в банке): / * Откройте базу данных и создать схемы * / sqlite3_open (БАЗ, и БД); sqlite3_exec (дБ, ТАБЛИЦА, NULL, NULL, & sErrMsg); sqlite3_exec (дБ, "ПРАГМА синхронное = ВЫКЛ", NULL, NULL, & sErrMsg); sqlite3_exec (дБ, "ПРАГМА journal_mode = ПАМЯТЬ", NULL, NULL, & sErrMsg); Импортные 864913 записей в 12.00 секунд Fantastic! Мы можем сделать 72000 вставки в секунду. Использование базы данных в памяти только для ног, давайте опираться на все предыдущие оптимизации и переопределить имя файла базы данных так что мы вновь работает полностью в оперативной памяти: #define БАЗЫ «: память:» Импортные 864913 записей в 10,94 секунд, это не супер-практично хранить нашу базу данных в оперативной памяти, но это впечатляет, что мы можем выполнить 79000 вставки в секунду. Рефакторинг кода на C Хотя конкретно не улучшение SQLite, я не люблю лишние операции присваивания символа * в то время цикла. Давайте быстро реорганизовать этот код передать выходной strtok () непосредственно в sqlite3_bind_text (), и пусть компилятор попытаться ускорить вещи для нас: Pfile = FOPEN (INPUTDATA, «г»); в то время как {fgets (sInputBuf, BUFFER_SIZE, Pfile) (feof (Pfile)!); sqlite3_bind_text (STMT, 1, strtok (sInputBuf, "\ т"), -1, SQLITE_TRANSIENT); / * Получить Маршрут * / sqlite3_bind_text (STMT, 2, strtok (NULL, "\ т"), -1, SQLITE_TRANSIENT); / * Получить Branch * / sqlite3_bind_text (STMT, 3, strtok (NULL, "\ т"), -1, SQLITE_TRANSIENT); / * Получить версии * / sqlite3_bind_text (STMT, 4, strtok (NULL, "\ т"), -1, SQLITE_TRANSIENT); / * Получить Стоп Номер * / sqlite3_bind_text (STMT, 5, strtok (NULL, "\ т"), -1, SQLITE_TRANSIENT); / * Получить Vehicle * / sqlite3_bind_text (STMT, 6, strtok (NULL, "\ т"), -1, SQLITE_TRANSIENT); / * Получить Дата * / sqlite3_bind_text (STMT, 7, strtok (NULL, "\ т"), -1, SQLITE_TRANSIENT); / * Получить времени * / sqlite3_step (STMT); / * Выполните инструкцию SQL * / sqlite3_clear_bindings (STMT); / * Очистить привязки * / sqlite3_reset (STMT); / * Сброс VDBE * / N ++; } Fclose (Pfile); Примечание: Мы вернулись к использованию реального файла базы данных. В памяти базы данных быстро, но не обязательно практично Импортные 864913 записей в 8,94 секундах Небольшого рефакторинга к коду обработки строк, используемому в нашем параметре связывания позволило выполнить 96,700 вставки в секунду. Я думаю, что можно с уверенностью сказать, что это достаточно быстро. Как мы начинаем настраивать другие переменные (т.е. размер страницы, создание индекса и т.д.), это будет нашим ориентиром. Резюме (до сих пор), я надеюсь, что вы все еще со мной! Поэтому мы начали спускаться по этой дороге, что производительность объемной вставки изменяется так дико с SQLite, и это не всегда очевидно, что необходимо сделать для ускорения нашей работы меняется. Используя тот же компилятор (и опцию компилятора), ту же версию SQLite и те же данные, мы оптимизировали наш код и наше использование SQLite, чтобы перейти от наихудшего сценария 85 вставок в секунду до более чем 96000 вставок в секунду! CREATE INDEX затем INSERT против INSERT затем CREATE INDEX Перед тем, как начать измерение производительности SELECT, мы знаем, что мы будем создавать индексы. Это было предложено в одном из ответов ниже, что при выполнении объемных вставок, это быстрее, чтобы создать индекс после того, как данные были вставлены (в отличие от создания индекса первого затем вставить данные). Давайте попробуем: Создать индекс затем вставить данные sqlite3_exec (дб, "CREATE INDEX 'TTC_Stop_Index' ON 'ТТС' ( 'Stop')", NULL, NULL, & sErrMsg); sqlite3_exec (дБ, "BEGIN TRANSACTION", NULL, NULL, & sErrMsg); ... Импортные 864913 записей в 18,13 секунд Вставка данных затем Создать индекс ... sqlite3_exec (децибел "END TRANSACTION", NULL, NULL, & sErrMsg); sqlite3_exec (дб, «CREATE INDEX 'TTC_Stop_Index' ON 'ТТС' (» 000 вставок в секунду. Создание индекса первого затем вставляя данные дает нам 47700 вставок в секунду, в то время как вставить данные первого затем создать индекс дает 63,300 вставки в секунду. Я бы с удовольствием принимаю предложения для других сценариев, чтобы попробовать ... И собираю аналогичные данные для запросов SELECT, в ближайшее время. 000 вставок в секунду. Создание индекса первого затем вставляя данные дает нам 47700 вставок в секунду, в то время как вставить данные первого затем создать индекс дает 63,300 вставки в секунду. Я бы с удовольствием принимаю предложения для других сценариев, чтобы попробовать ... И собираю аналогичные данные для запросов SELECT, в ближайшее время.
2.5k

голосов
24

ответ
720.3k

Просмотры

Без учета регистра «Содержит (строка)»

Есть ли способ сделать следующее возвращение верно? строка заголовка = "ASTRINGTOTEST"; title.Contains ( "строка"); Там, кажется, не быть перегрузка, которая позволяет мне установить чувствительность к регистру .. В настоящее время я верхнийРЕГИСТР их обоих, но это просто глупо (под которым я имею в виду вопросы, i18n, которые приходят с вверх и вниз корпуса). UPDATE Этот вопрос является древним и с тех пор я понял, что я попросил простой ответ на очень обширную и сложную тему, если вы заботитесь, чтобы полностью исследовать его. В большинстве случаев, в моно-язычный, английский код база, этот ответ будет достаточно. Я подозревал, что большинство людей, приезжающих сюда попадают в эту категорию, это самый популярный ответ. Ответ на этот вопрос, однако вызывает врожденную проблему, которую мы можем» т сравнить текст регистронезависимы, пока мы не знаем, оба текста имеют тот же культура, и мы знаем, что это культура. Это, может быть, менее популярный ответ, но я думаю, что это более правильно, и именно поэтому я пометил его как таковой.
Boris Callens
2.5k

голосов
11

ответ
711.8k

Просмотры

Что означает явное ключевое слово означает?

Что означает явное ключевое слово означает в C ++?
Skizz
2.3k

голосов
30

ответ
727.2k

Просмотры

Почему «с помощью патезраса» считается плохой практикой?

Я сказал, что другие записи с помощью патезрасе в коде не так, и что я должен использовать зЬй :: COUT и зЬй :: CIN непосредственно вместо этого. Почему используется патезрасе считается плохой практикой? Является ли это неэффективно или же он рискует объявляющий неоднозначные переменные (переменные, которые разделяют то же имя функции в станде имен)? она влияет ли производительность?
akbiggs
2.2k

голосов
26

ответ
992.8k

Просмотры

Как установить, ясно, и переключить один бит?

Как установить, ясно, и переключить бит в C / C ++?
JeffV
2.2k

голосов
26

ответ
196.9k

Просмотры

Должен ли я бросить результат таНос?

В этом вопросе, кто-то предложил в комментариях, что я не должен бросить результат таНоса, т.е. INT * решето = таНос (SizeOf (INT) * длина); а не: междунар * решето = (интермедиат *) таНос (SizeOf (INT) * длина); Почему это так?
Patrick McDonald
2.2k

голосов
9

ответ
303.3k

Просмотры

Каковы правильные номера версий для C #?

Каковы правильные номера версий для C #? Что вышло, когда? Почему я не могу найти ответы на вопросы о C # 3.5? Этот вопрос в первую очередь, чтобы помочь тем, кто ищет ответ на вопрос, используя неправильный номер версии, например, C # 3.5. Надежда состоит в том, что кто-то не в состоянии найти ответ с неправильным номером версии найти этот вопрос, а затем повторите поиск с правой номером версии.
2.1k

голосов
7

ответ
464.5k

Просмотры

Когда следует static_cast, использовать dynamic_cast, const_cast и reinterpret_cast?

Каковы соответствующие виды использования: static_cast dynamic_cast const_cast reinterpret_cast C-стиль типа литой (тип) Функция Значение стиля литом (значение) Как один решить, какой из них использовать, в каких конкретных случаях?
e.James
2.1k

голосов
25

ответ
1.2m

Просмотры

Каков наилучший способ для перебора словаря?

Я видел несколько различных способов перебирать словарь в C #. Есть стандартный способ?
Jake Stewart
2.1k

голосов
10

ответ
221.7k

Просмотры

Почему поэлементно дополнение намного быстрее в отдельных циклах, чем в комбинированном цикле?

Пусть a1, b1, c1, и точка d1 до кучи памяти и мой числовой код имеет следующий основной цикл. сопзЬ Int N = 100000; для (Int J = 0, J <N; j ++) {a1 [J] + = b1 [J]; с1 [J] + = d1 [J]; } Этот цикл выполняется 10000 раз с помощью другого внешнего для цикла. Чтобы ускорить его, я изменил код: для (Int J = 0, J <п; j ++) {a1 [J] + = b1 [J]; } Для (Int J = 0, J <N; j ++) {с1 [J] + = d1 [J]; } Составитель на MS Visual C ++ 10.0 с полной оптимизацией и поддержкой SSE2, для 32-разрядных на Intel Core 2 Duo (64), первый пример занимает 5,5 секунд, и пример двойного цикла занимает всего 1,9 секунды. Мой вопрос: (Пожалуйста, обратитесь к моему перефразировать вопрос на дне) PS: Я не уверен, если это поможет: Демонтажная для первого контура в основном выглядит следующим образом (этот блок повторяется примерно пять раз в полной программе): MOVSD XMM0, mmword PTR [ECX + 30h] addsd XMM0, mmword PTR [EAX + 40h] MOVSD mmword PTR [EAX + 40h], XMM0 вопрос оказался не имеет значения, поскольку поведение сильно зависит от размеров массивов (п ) и кэш-память процессора. Так что если есть дальнейший интерес, я перефразирую вопрос: Могли бы вы предоставить некоторое твердое представление о деталях, которые приводят к различному поведению кэша, как показано на пять регионов на следующий графике? Она также может быть интересно отметить различия между архитектурой процессора / кэша, предоставляя аналогичный график для этих процессоров. PPS: Вот полный код. Он использует TBB Tick_Count для более высокого разрешения времени, которое может быть отключено не определяя TBB_TIMING Macro: #include #include #include #include // # определить TBB_TIMING #ifdef TBB_TIMING #include с использованием TBB :: tick_count; #else #include #endif использования патезраса; // # определить preallocate_memory new_cont перечисление {new_cont, new_sep}; двойной * a1 * b1, c1 *, * d1; алло аннулированию (INT прод, Int N) {переключатель (продолжение) {случай new_cont: a1 = новый двойной [п * 4]; b1 = a1 + п; с1 = b1 + п; d1 = c1 + п; перерыв; случай new_sep: a1 = новый двойной [п]; b1 = новый двойной [п]; с1 = новый двойной [п]; d1 = новый двойной [п]; перерыв; } Для (INT I = 0; <п; я ++) {a1 [I] = 1,0; d1 [I] = 1,0; с1 [I] = 1,0; b1 [I] = 1,0; }} Недействительными и далее (целое продолжение) {переключатель (продолжение) {случай new_sep: удаление [] b1; удалить [] c1; удалить [] d1; случай new_cont: удаление [a1]; }} Двойной простой (Int N, Int м, внутр прод, INT петли) {#ifndef preallocate_memory алло (продолжение, п); #endif #ifdef TBB_TIMING tick_count t0 = tick_count :: сейчас (); #else clock_t начать = часы (); #endif, если (петли == 1) {для (INT I = 0; I <т; я ++) {для (Int J = 0, J <N; j ++) {a1 [J] + = b1 [J]; с1 [J] + = d1 [J]; }}} Еще {для (INT I = 0; г <м; я ++) {для (Int J = 0; J <п; j ++) {a1 [J] + = b1 [J]; } Для (Int J = 0, J <N; j ++) {с1 [J] + = d1 [J]; }}} Дважды RET; #ifdef TBB_TIMING tick_count t1 = tick_count :: сейчас (); RET = 2,0 * двойной (п) * двойной (м) / (t1-t0) .seconds (); #else clock_t конец = часы (); RET = 2,0 * двойной (п) * двойной (м) / (двойной) (окончание - старт) * двойной (CLOCKS_PER_SEC); #endif #ifndef preallocate_memory и далее (продолжение); #endif вернуться в отставке; } силы основных () {freopen ( "C: \\ test.csv", "ш", стандартный вывод); символ * s = "«; Строка на [2] = { "new_cont", "new_sep"}; соиЬ
Johannes Gerer
2k

голосов
30

ответ
1.1m

Просмотры

Как получить последовательные байты представление строк в C # без указания вручную кодировки?

Как преобразовать строку в Byte [] в .NET (C #), вручную указав конкретную кодировку? Я собираюсь зашифровать строку. Я могу зашифровать его без преобразования, но я все же хотел бы знать, почему кодирование приходит, чтобы играть здесь. Кроме того, почему кодирующим следует принимать во внимание? Не могу ли я просто получить то, что байты строка была сохранена в? Почему существует зависимость от кодировки символов?
Agnel Kurian
2k

голосов
7

ответ
861.3k

Просмотры

Каковы основные правила и идиомы для перегрузки операторов?

Примечание: Ответы были даны в определенном порядке, но так как многие пользователи сортировать ответы по голосам, а не время, они были даны, вот индекс ответов в том порядке, в котором они составляют большинство смысла: Общий синтаксис оператора перегрузки в C ++ Три основных правила перегрузки операторов в C ++ Выбор между членами и не-членами общих операторами перегружать оператор присваивания входных и выходных операторы функции оператора вызова операторы сравнения арифметических операторы индексацию массивы операторы для Pointer подобных Типов операторов преобразования перегрузки новых и удалить (Примечание: Это должно быть запись в стек C ++ FAQ переливных в случае, если вы хотите, чтобы критиковать идею предоставления ФАК в таком виде, то проводки по мета, что началось все это было бы место, чтобы сделать это..Ответы на этот вопрос отслеживаются в C ++, чат, где FAQ идея началась в первую очередь, так что ваш ответ очень вероятно, чтобы прочитать те, кто пришел с идеей.)
sbi
1.9k

голосов
30

ответ
708.9k

Просмотры

Глубокие объекты клонированию

Я хочу сделать что-то вроде: MyObject myObj = GetMyObj (); // Создать и заполнить новый объект MyObject newObj = myObj.Clone (); А затем внести изменения в новый объект, которые не отражены в исходном объекте. Я не часто нужна эта функция, поэтому, когда это было необходимо, я прибегал к созданию нового объекта, а затем скопировать каждое свойство в отдельности, но она всегда оставляет меня с чувством, что есть лучший и более элегантный способ обработки ситуация. Как я могу клонировать или глубокой копии объекта, так что клонированный объект может быть изменен без каких-либо изменений, отражаясь в исходном объекте?
NakedBrunch
1.9k

голосов
30

ответ
459.4k

Просмотры

В чем разница между #include и #include «имя_файла»?

В C и C ++ языков программирования, в чем разница между использованием угловых скобок и использование цитат в включаемого заявлении следующим? #include #include "имя_файла"
quest49
1.9k

голосов
8

ответ
235.8k

Просмотры

Что такое Правило трех?

Что копирование объекта означает? Что конструктор копирования и оператор копирующего присваивания? Когда мне нужно объявить их сам? Как я могу предотвратить мои объекты от копирования?
fredoverflow
1.9k

голосов
30

ответ
1.1m

Просмотры

Что такое NullReferenceException, и как это исправить?

У меня есть некоторый код, и, когда он выполняет, он бросает NullReferenceException, говоря: Ссылка на объект не указывает на экземпляр объекта. Что это значит, и что я могу сделать, чтобы исправить эту ошибку?
1.8k

голосов
10

ответ
168.4k

Просмотры

Если «с помощью» директивы быть внутри или вне пространства имен?

Я бежал StyleCop над некоторыми C # код, и он держит отчет, что мои директивы используя должны быть внутри пространства имен. Есть технические причины для сдачи с помощью директив внутри вместо вне пространства имен?
benPearce
1.8k

голосов
27

ответ
448.5k

Просмотры

Поймать несколько исключений сразу?

Это не рекомендуется, чтобы просто поймать System.Exception. Вместо этого, только «известные» исключения должны быть пойманы. Теперь, это иногда приводит к ненужным повторяющийся код, например: попробуйте {WEBID = новый Guid (QueryString [ «веб»]); } Задвижка (FormatException) {WEBID = Guid.Empty; } Задвижка (OverflowException) {WEBID = Guid.Empty; } Интересно: Есть ли способ, чтобы поймать как исключения и только называют WEBID = Guid.Empty называют один раз? Данный пример достаточно прост, так как это всего лишь GUID. Но представьте себе код, где вы изменить объект несколько раз, и если одна из манипуляций неудачи в ожидаемом пути, вы хотите, чтобы «сбросить» объект. Однако, если есть неожиданное исключение, я все еще хочу, чтобы бросить, что выше.
Michael Stum
1.8k

голосов
26

ответ
455.4k

Просмотры

В чем разница между атомными и неатомическими атрибутами?

Что атомное и неатомическое среднее в объявлениях недвижимости? @property (неатомический, сохраняет) UITextField * Имя пользователя; @property (атомный, сохраняют) UITextField * Имя пользователя; @property (сохранить) UITextField * Имя пользователя; Что такое оперативная разница между этими тремя?
Alex Wayne
1.7k

голосов
30

ответ
502.4k

Просмотры

Как рассчитать кого-то возраста в C #?

Учитывая DateTime, представляющий день рождения человека, как рассчитать их возраст в годах?
1.7k

голосов
5

ответ
293.9k

Просмотры

Что такое копирование и своп идиома?

Что это идиома, и когда его следует использовать? Какие проблемы он решает? Есть ли когда C ++ 11 используется изменение идиома? Несмотря на то, что это было упомянуто во многих местах, у нас не было какой-либо единственном «что это» вопрос и ответ, так вот она. Вот неполный список мест, где это было ранее упомянутыми: Какие ваши любимые C ++ Coding Style идиомы: Прописи подкачки конструктора копирования и оператор = перегрузки в C ++: это общая функция возможно? Что такое копия элизия и как она оптимизирует копирования и замены идиомы C ++: динамическое выделение массив объектов?
GManNickG
1.7k

голосов
4

ответ
222.8k

Просмотры

Что делает C ??! ??! оператор делать?

Я видел линию С, который выглядел так: ErrorHasOccured () ??! ??! HandleError (); Он правильно составлен и, кажется, хорошо работать. Похоже, что это проверка, если произошла ошибка, и если у него есть, он обрабатывает его. Но я не совсем уверен, что это на самом деле делать или как это делать. Это выглядит как программист пытается выразить свои чувства по поводу ошибок. Я никогда не видел ??! ??! до этого в любом языке программирования, и я не могу найти документацию для него в любом месте. (Google не помогает поисковых терминов, как ??! ??!). Что это делает и как работает пример кода?
Peter Olson
1.6k

голосов
30

ответ
948.2k

Просмотры

Как создать Excel (.xls и .xlsx) файл в C # без установки MS Office?

Как я могу создать таблицу Excel с C # без необходимости Excel должен быть установлен на компьютере, на котором выполняется код?
1.6k

голосов
30

ответ
944.9k

Просмотры

Создание Excel (.XLS и .XLSX) файл из C #

Как я могу создать таблицу Excel с C # без необходимости Excel должен быть установлен на компьютере, на котором выполняется код?
1.6k

голосов
6

ответ
174.9k

Просмотры

C ++ 11 вводил стандартную модель памяти. Что это значит? И как это будет влиять на программирование на C ++?

C ++ 11 вводил стандартную модель памяти, но что именно это значит? И как это будет влиять на программирование на C ++? Эта статья (Гэвин Кларк, который цитирует Herb Sutter) говорит, что модель памяти означает, что C ++ код теперь имеет стандартизированную библиотеку для вызова независимо от того, кто сделал компилятор и на какой платформе он работает. Там это стандартный способ управления, как различные темы, говорить с памятью процессора. «Когда вы говорите о расщеплении [код] между различными ядрами, который в стандарте, мы говорим о модели памяти. Мы будем оптимизировать его, не нарушая следующие предположения люди собираются сделать в коде,» сказал Саттер. Ну, я могу запомнить это и подобные пункты доступны в Интернете (как я имел свою собственную модель памяти с рождения: P) и даже может отправлять в ответ на вопросы, заданные другими, но если честно, я не совсем понимаю. Итак, что я в принципе хочу знать, C ++ программисты используются для разработки еще до многопоточных приложений, так как это имеет значение, если это POSIX нитей, или Windows, темы или C ++ 11 потоков? Каковы преимущества? Я хочу, чтобы понять детали низкого уровня. Я также получаю это ощущение, что модель памяти C ++ 11 так или иначе связанное с C ++ 11 многопоточной поддержки, так как я часто вижу эти два вместе. Если да, то как именно? Почему они должны быть связаны? Так как я не знаю, как Внутренности многопоточной работы, и какая модель памяти означает, в общем, пожалуйста, помогите мне понять эти понятия. :-) что я в принципе хочу знать, C ++ программисты использовали для разработки еще до многопоточных приложений, так как это имеет значение, если это POSIX нитей, или Windows, темы или C ++ 11 потоков? Каковы преимущества? Я хочу, чтобы понять детали низкого уровня. Я также получаю это ощущение, что модель памяти C ++ 11 так или иначе связанное с C ++ 11 многопоточной поддержки, так как я часто вижу эти два вместе. Если да, то как именно? Почему они должны быть связаны? Так как я не знаю, как Внутренности многопоточной работы, и какая модель памяти означает, в общем, пожалуйста, помогите мне понять эти понятия. :-) что я в принципе хочу знать, C ++ программисты использовали для разработки еще до многопоточных приложений, так как это имеет значение, если это POSIX нитей, или Windows, темы или C ++ 11 потоков? Каковы преимущества? Я хочу, чтобы понять детали низкого уровня. Я также получаю это ощущение, что модель памяти C ++ 11 так или иначе связанное с C ++ 11 многопоточной поддержки, так как я часто вижу эти два вместе. Если да, то как именно? Почему они должны быть связаны? Так как я не знаю, как Внутренности многопоточной работы, и какая модель памяти означает, в общем, пожалуйста, помогите мне понять эти понятия. :-) Я также получаю это ощущение, что модель памяти C ++ 11 так или иначе связанное с C ++ 11 многопоточной поддержки, так как я часто вижу эти два вместе. Если да, то как именно? Почему они должны быть связаны? Так как я не знаю, как Внутренности многопоточной работы, и какая модель памяти означает, в общем, пожалуйста, помогите мне понять эти понятия. :-) Я также получаю это ощущение, что модель памяти C ++ 11 так или иначе связанное с C ++ 11 многопоточной поддержки, так как я часто вижу эти два вместе. Если да, то как именно? Почему они должны быть связаны? Так как я не знаю, как Внутренности многопоточной работы, и какая модель памяти означает, в общем, пожалуйста, помогите мне понять эти понятия. :-)
Nawaz
1.6k

голосов
30

ответ
596.2k

Просмотры

Как я могу сделать UITextField двигаться вверх, когда клавиатура присутствует?

С SDK IOS: У меня есть UIView с UITextFields, которые воспитывают клавиатуры. Мне нужно, чтобы иметь возможность: Разрешить прокрутку содержимого UIScrollView видеть другие текстовые поля после того, как клавиатура воспитывается Автоматически «прыжок» (путем прокрутки вверх) или укорочения я знаю, что мне нужно UIScrollView. Я попытался изменить класс моего UIView к UIScrollView, но я до сих пор не прокручивать текстовые поля вверх или вниз. Нужно ли как в UIView и UIScrollView? Идет ли один внутри другого? Что должно быть реализовано для того, чтобы автоматически прокручивать к активному текстовому полю? В идеале, как большая часть установки компонентов, как это возможно будет сделано в Interface Builder. Я хотел бы только написать код для того, что нужно. Примечание: UIView (или UIScrollView), что я работаю с воспитывается в TabBar (UITabBar), который должен работать в обычном режиме. Изменить: Я добавляю полосу прокрутки только когда клавиатура идет вверх. Несмотря на то, что это не нужно, я чувствую, что он обеспечивает более удобный интерфейс, потому что тогда пользователь может прокручивать и изменить текстовые поля, например. Я получил это работает, где я могу изменить размер кадра UIScrollView, когда клавиатура идет вверх и вниз. Я просто с помощью: - (Недействительными) textFieldDidBeginEditing: (UITextField *) TextField {// клавиатура становится видимым scrollView.frame = CGRectMake (scrollView.frame.origin.x, scrollView.frame.origin.y, scrollView.frame.size .width, scrollView.frame.size.height - 215 + 50); // изменить размер} - (Недействительными) textFieldDidEndEditing: (UITextField *) TextField {// клавиатура будет скрывать scrollView.frame = CGRectMake (scrollView.frame.origin.x, scrollView.frame.origin.y, scrollView.frame.size.width, scrollView.frame.size.height + 215 - 50); // изменить размер} Однако, это не автоматически «двигаться вверх» или центрирования нижних текстовых полей в видимой области, которая является то, что я действительно хотел бы.
1.6k

голосов
10

ответ
213.5k

Просмотры

Почему читает строки из стандартного ввода гораздо медленнее, в C ++, чем Python?

Я хотел сравнить чтение строк ввода строки из стандартного ввода с использованием Python и C ++ и был шокирован, когда увидел мой код C ++ запустить на порядок медленнее, чем эквивалентный код Python. Так как мой C ++ ржавый, и я еще не эксперт Pythonista, скажите, пожалуйста, если я делаю что-то неправильно, или если я что-то недоразумение. (TLDR ответ: включить заявление: cin.sync_with_stdio (ложь) или просто использовать fgets вместо результатов TLDR:. Прокрутить весь путь вниз к нижней части моего вопроса и посмотреть на таблицу.) C ++ код: #include #include с помощью пространства имен станд; INT основных () {строка input_line; долго line_count = 0; time_t начать = время (NULL); ИНТ сек; ИНТ LPS; в то время как (CIN) {GetLine (CIN, input_line); (! Cin.eof ()), если line_count ++; }; сек = (целое) Время (NULL) - старт; сегг
1.6k

голосов
11

ответ
437.1k

Просмотры

Как я могу профиль C ++ код, работающий на Linux?

У меня есть приложение C ++, работающий на Linux, что я нахожусь в процессе оптимизации. Как я могу определить, какие области моего кода работают медленно?
Gabriel Isenberg
1.5k

голосов
16

ответ
413.4k

Просмотры

Почему шаблоны быть реализованы только в заголовочном файле?

Цитата из ++ стандартной библиотеки C: учебное пособие и руководство: Единственный портативный способ использования шаблонов на данный момент реализовать их в заголовочных файлах с помощью встроенных функций. Почему это? (Разъяснение: файлы заголовков не только портативное решение Но они являются наиболее удобным портативным решением.).
MainID
1.5k

голосов
5

ответ
92.1k

Просмотры

Есть ли причина для повторного использования переменного в Еогеаспе С #?

При использовании лямбда-выражения или анонимные методы в C #, мы должны быть осторожны доступа к модифицированному закрытия западню. Например: Еогеасп (вар ы в строках) {запроса = query.Where (I => i.Prop == ами); // доступ к модифицированному закрытию ...} Из-за измененное закрытие, приведенный выше код будет вызывать все ИНЕК в запросе должны быть основан на конечном значении с. Как было указано, это происходит потому, что с переменной, объявленной в цикле Еогеасп выше переводится как это в компиляторе: строка s; в то время как (enumerator.MoveNext ()) {s = enumerator.Current; ...} вместо так: в то время как (enumerator.MoveNext ()) {строка s; s = enumerator.Current; ...} Как было указано здесь, нет производительности преимуществ объявить переменную вне цикла, и при нормальных обстоятельствах единственная причина, я могу думать делать это, если вы планируете использовать переменную вне области цикла: строка s; в то время как (enumerator.MoveNext ()) {s = enumerator.Current; ...} вар finalString = s; Однако переменные, определенные в цикле Еогеасп не могут быть использованы за пределами контура: Еогеасп (строка s в строках) {} вар finalString = S; // не будет работать: вы находитесь за пределами области. Таким образом, компилятор объявляет переменную таким образом, что делает его весьма склонным к ошибке, которая часто бывает трудно найти и отладки, а не производя никакого заметного преимущества. Есть ли что-то можно сделать с Еогеасп петлей таким образом, что вы не могли, если они были скомпилированы с внутренней областью действия переменным, или это просто произвольный выбор, который был сделан до анонимных методов и лямбда-выражения были доступны или распространены,
StriplingWarrior
1.5k

голосов
28

ответ
1.8m

Просмотры

Как сгенерировать случайное число Int в C #?

Как сгенерировать случайное число в C #?
Rella
1.5k

голосов
8

ответ
605.5k

Просмотры

Регулярный бросок против static_cast против dynamic_cast [дубликат]

Этот вопрос уже есть ответ здесь: Когда нужно static_cast, dynamic_cast, const_cast и reinterpret_cast использовать? 7 ответов я писал Си и Си ++ кода почти двадцать лет, но есть один аспект этих языков, которые я никогда не понимал. Я, очевидно, использовал регулярные слепки т.е. MyClass * т = (MyClass *) PTR; повсюду, но там, кажется, два других типа слепков, и я не знаю разницу. В чем разница между следующими строками кода? МойКласс * т = (MyClass *) PTR; МойКласс * т = static_cast (PTR); МойКласс * т = dynamic_cast (PTR);
Graeme Perrow

Связанные вопросы