18.04.2012
Приоритетная очередь на основе бинарной, биномиальной и фибонначиевой куч и ее применение в многоагентных поисковых системах
|
||||||||||||
|
Аннотация: В статье представлена реализация приоритетной очереди на основе бинарной, биномиальной и фибоначчиевой куч. Указаны асимптотические сложности и приведены сравнительные характеристики базовых операций. Данная приоритетная очередь будет использована для разработки агента «хранителя знаний» многоагентной поисковой системы. Ключевые слова: Структуры данных; бинарная куча; биномиальная куча; фибоначчиева куча; |
|||||||||||
10.10.2013
Проблемы взаимодействия кода на языках C/C++/Objective-C
|
||||||||||||
|
Аннотация: Данная статья посвящена проблемам взаимодействия кода на языках C/C++/Objective-C. Здесь охватываются различные темы – и объектно-оринтированного программирования, и процедурного, такие возможности Objective-C, как блоки, и аналогичные возможности C++11 – лямбды, а также некоторые нюансы стандарта C99. Ключевые слова: Objective-C; C++; C; Взаимодействие; Проблемы; С++11; C89; C99 |
|||||||||||
05.02.2003
Где взять стандарт C или C++
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>P>Объясните, пожалуйста, текст стандарта является каким-то секретом? Защищен копирайтом так, что его читать нельзя?</span><br />
<br />
Читать стандарт можно, секретом он не является. Однако окончательная версия стандарта не является бесплатной, электронную версию можно скачать за $18 с сайта [url=<a class="m" href="http://www.iso.org" target="_blank">http://www.iso.org</a>... Ключевые слова: |
|||||||||||
19.03.2011
Занимательный C++
|
||||||||||||
|
Аннотация: Несколько веселых и интересных примеров на языке C++. Ключевые слова: C++, прикол, шутка |
|||||||||||
27.04.2006
Как самого себя проверить на знание С++
|
||||||||||||
|
Аннотация: Здравствуйте, DmitryU, Вы писали:<br />
<span class='lineQuote level1'><br />
DU>По различным предметам существуют различные сертификации</span><br />
<span class='lineQuote level1'>DU>Когда я сдавал сертификацию на MCSE то была возможность найти вопросник с ответами на</span><br />
<span class='lineQuote level1'>DU>TestKing или Transcender или Fravo или тому подобное</span><br />
<span class='lineQuote level1'>DU>А как бы найти подходящий тест с ответами по с++</span><br />
DU... Ключевые слова: |
|||||||||||
25.04.2007
20 ловушек переноса Си++ - кода на 64-битную платформу
|
||||||||||||
|
Аннотация: Рассмотрены программные ошибки, проявляющие себя при переносе Си++ - кода с 32-битных платформ на 64-битные платформы. Приведены примеры некорректного кода и способы его исправления. Перечислены методики и средства анализа кода, позволяющие диагностировать обсуждаемые ошибки. Ключевые слова: cpp |
|||||||||||
29.12.2011
Реализация новых парадигм программирования в C++: плюсы и минусы
|
||||||||||||
|
Аннотация: В статье кратко рассматриваются плюсы и минусы реализации на C++ библиотек / сред, предлагающих разработчику новые парадигмы программирования или новое подмножество языка (Domain Specific Language). В качестве примера обсуждаются реализации функционального программирования в библиотеках boost::lambda и boost::phoenix. Ключевые слова: boost; lambda; phoenix; функциональное программирование в C++ |
|||||||||||
C++ 11 |
||||||||||||
09.12.2004
Пара вопросов по стандарту С++
|
||||||||||||
|
Аннотация: Dr.Gigabit,<br />
<span class='lineQuote level1'><br />
> 1) Каково сейчас положение дел со стандартом С++ (какие последние версии, каков механизм принятия стандарта, когда ждать очередного релиза и т.д). Доступна ли полная версия стандарта для общественного пользования? (слышал, что нет)</span><br />
<br />
Стандарт принят в 1998 году, в 2003 к нему вышл... Ключевые слова: |
|||||||||||
22.10.2003
[news] Towards C++0x
|
||||||||||||
|
Аннотация: В форуме часто проскакивают вопросы: "Чего новенького ожидается в следующем стандарте?"<br />
Строго говоря, естественно, точного ответа на этот вопрос не знает никто, включая комитет<br />
стандартизации. Однако, получить некоторое представление чего, в принципе, можно ожидать<br />
от следующей версии языка, мож... Ключевые слова: |
|||||||||||
28.05.2012
C++ :: Чувствуя себя в гостях
|
||||||||||||
|
Аннотация: Освещены такие части нового стандарта, как rvalue references и lambda expressions. Подробно изложены относящиеся к ним вопросы, в том числе использование std::move и std::function Ключевые слова: C++11; rvalue references; lambda expressions; |
|||||||||||
14.05.2012
Шаблоны с переменным количеством аргументов в C++11
|
||||||||||||
|
Аннотация: В статье проводится обзор основных возможностей шаблонов с переменным количеством аргументов, которые появились в новом станрте C++ (C++11), а также рассматривается их применение на примерах реализации различных функторов. Ключевые слова: C++; C++11; variadic templates; Шаблоны C++; |
|||||||||||
С++ Arena |
||||||||||||
19.03.2003
Делегаты на C++
|
||||||||||||
|
Аннотация: Делегаты в CLR удобны, типобезопасны и эффективны. Последнее время на форумах RSDN часто поднимается вопрос о том, можно ли реализовать делегаты с аналогичными свойствами, оставаясь в рамках "чистого" C++. Оказывается, это вполне возможно. В этой статье я покажу, как это сделать. Ключевые слова: delegates |
|||||||||||
30.11.2003
C++: метаданные своими руками
|
||||||||||||
|
Аннотация: В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных - метаданных типов. Ключевые слова: xml |
|||||||||||
23.05.2006
Ещё один подход к сериализации на С++
|
||||||||||||
|
Аннотация: “Вопросы сохранения данных из объектов, так или иначе, возникают у каждого разработчика”. Именно с этой фразы я начал первую статью посвещённую сериализации, и с этой фразы мне бы хотелось продолжить описание идеи использования карт для организации сериализации.
Если вы пишете на С++, то ваша программа скорее всего состоит из объектов классов, которые в своей совокупности образуют некую систему данных и кода, работающего с этими данныим. И практически всегда вы хотите в какой-то момент сохранить в том или ином виде эти данные – будь то результат многолетних вычислений программы или просто текущее состояние каких-то компонентов системы. А потом снова загрузить эти данные назад, в вашу программу, как будто бы и ничего не происходило. Или искажем отправить эти данные по сети, другой программе. И при этом, очень нехочетатся трартить много времени на программирование сохранения/загрузки, упаковку стрктур в каки-то изобретённые сегодня утром форматы, отладку всего этого, модификацию в связи с появлением в структурах данных новых полей, документирование, и прочую головную боль.
Подход, описаный ниже, я надеюсь, поможет многим сэкономить время и облегчить жизнь.
Ключевые слова: Serialization |
|||||||||||
22.05.2005
Использование метаданных в программах на языке C++
|
||||||||||||
|
Аннотация: Цель данной статьи - показать, что метаданные это мощный механизм, требующий выделения в отдельный компонент, который хотелось бы видеть в стандартной библиотеке С++. Ключевые слова: metadata |
|||||||||||
01.12.2001
Как вставлять в программу на C++ двоичные константы?
|
||||||||||||
|
Аннотация: В языке C++ есть восьмеричные, десятичные и шестнадцатеричные константы. А двоичных - нет. Тем не менее, при помощи препроцессора можно соорудить макрос, который позволит нам смоделировать такие константы. Основная идея - преобразовывать восьмеричную константу в двоичную, выделяя из неё отдельные ци... Ключевые слова: |
|||||||||||
19.07.2003
Мультиметоды и С++
|
||||||||||||
|
Аннотация: Мультиметоды - виртуальные функции, принадлежащие сразу нескольким классам. В статье разбирается суть мультиметодов, их особенности, а также возможная реализация мультиметодов на C++. Ключевые слова: Мультиметоды, multimethods |
|||||||||||
10.03.2010
О lock-free алгоритмах (+бонус)
|
||||||||||||
|
Аннотация: [пост получился достаточно длинный, поэтому сразу скажу о бонусе — это простой и эффективный алгоритм очереди на основе буфера фиксированного размера — нетерпеливые могут сразу перемещаться к концу поста <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /> ]<br />
<br />
Последние дни на RSDN шла своего рода распределенная игра по написанию lock-free контейн... Ключевые слова: |
|||||||||||
29.01.2003
Обработка событий в С++
|
||||||||||||
|
Аннотация: Демонстрационный проект - events.zip Ключевые слова: |
|||||||||||
20.03.2005
Реализация отложенной загрузки библиотек на С++
|
||||||||||||
|
Аннотация: В данной статье описывается способ реализации отложенной загрузки динамических библиотек на С++ без использования механизма delayload, приведена реализация библиотеки отложенной загрузки и пример ее использования.
Ключевые слова: DelayLoad |
|||||||||||
18.11.2002
Реализация сборки мусора на С++
|
||||||||||||
|
Аннотация: В данной статье мы рассмотрим обобщённую реализацию сборки мусора на С++. Будут обсуждены два конкретных алгоритма сборки мусора – “Mark-Sweep” и “Mark-Compact”, и их реализация. Мы также рассмотрим ограничения, которые накладываются на приложения при использовании сборки мусора, и изменения в компи... Ключевые слова: |
|||||||||||
Свойства в С++
|
||||||||||||
|
Аннотация:
В этой статье автор рассматривает различные способы реализации свойств в
стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++,
тогда как другие годятся для применения в любой программе, написанной на
языке C++.
Ключевые слова: |
|||||||||||
05.03.2003
Симуляция частичной специализации
|
||||||||||||
|
Аннотация: Время от времени при работе с шаблонами возникает необходимость специализировать шаблон класса по одному из аргументов. В качестве примера можно рассмотреть шаблон классов матриц, параметризованный типом элемента и размерами матрицы. Однако некоторые компиляторы не поддерживают частичную специализацию, и, как следствие, «не понимают» подобные конструкции. Желание получить эквивалентную функциональность при работе с такими компиляторами приводит к технике, описанной ниже. Ключевые слова: |
|||||||||||
19.03.2004
Симуляция блока try-finally для С++
|
||||||||||||
|
Аннотация: В некоторых языках программирования существует конструкция вида try-finally, в которой секция finally выполнялась обязательно, как при возникновении исключений, так и при нормальном ходе выполнения программы. Поскольку в языке C++ такой конструкции явно не присутствует, мы можем попытаться описать её самостоятельно, прибегая к помощи макропрепроцессора. Ключевые слова: try-finally |
|||||||||||
13.07.2010
Строгие перечисления в С++
|
||||||||||||
|
Аннотация: В данной статье рассмотрены несколько решений, позволяющих ослабить или практически полностью избавиться от недостатков перечислений (enumerations) языка программирования С++. Представленные решения, отличаются сложностью реализации и функциональностью, и могут оказаться полезными в арсенале каждого современного разработчика. Ключевые слова: С++; перечисления; кодогенерация; метапрограммирование; типобезопасность; |
|||||||||||
27.07.2005
Указатели на функции-члены и реализация самых быстрых делегатов на С++.
|
||||||||||||
|
Аннотация: В данной статье предоставлен исчерпывающий материал по указателям на функции-члены, а также приведена реализация делегатов, которые занимают всего две операции на ассемблере. Ключевые слова: Делегаты, указатели, функции-члены |
|||||||||||
C++/CLI |
||||||||||||
13.12.2005
C++/CLI Language Specification
|
||||||||||||
|
Аннотация: Здесь : <a class="m" href="" target="_blank">http://www.ecma-international.org/publications/standards/Ecma-372.htm</a> Ключевые слова: |
|||||||||||
29.11.2005
[ANN] C++/CLI Overview на сайте коммитета
|
||||||||||||
|
Аннотация: Что-то раньше не замечал <img border='0' width='15' height='20' src='../Forum/images/shuffle.gif' />, но на сайте коммитета лежит замечательная презентация Герба Саттера "C++/CLI Overview" (67 страниц).<br />
<br />
<a class="m" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1557.pdf" target="_blank">www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1557.pdf</a><br />
<br />
Рекомендую <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /> даже для тех, кто не собирается писать на C++/CLI, полезно зачем он нужен и что в не... Ключевые слова: |
|||||||||||
CRT |
||||||||||||
19.01.02
Анатомия C Run-Time, или Как сделать программу немного меньшего размера
|
||||||||||||
|
Аннотация: Статья посвящена вопросам оптимизации размера выполняемых модулей, генерируемых различными
компиляторами C++ (основное внимание уделено MS Visual С++). С этой целью рассматриваются особенности Библиотеки исполнения C/C++ и ее реализаций, а также процессы компиляции и компоновки приложений. Приведены практические приемы, позволяющие в ряде случаев уменьшить размер приложения до величины 3-4 килобайта. Ключевые слова: |
|||||||||||
Deep C++ |
||||||||||||
27.12.2002
C++ Q&A
|
||||||||||||
|
Аннотация: - Бывают ли в C++ чисто виртуальные деструкторы? Кажется мне, что нет – ведь деструктор наследника обязан вызвать деструктор базового класса. А что ему делать, если у базового класса деструктор не определен?
- Является ли в C++ имя функции указателем на ее начало, как это было в С? Ключевые слова: |
|||||||||||
30.10.2004
const - когда быть, когда не быть
|
||||||||||||
|
Аннотация: Q. Довольно продолжительное время ломаю голову - когда делать функцию константной, а когда в этом нет необходимости??? Ключевые слова: |
|||||||||||
28.03.2003
const volatile
|
||||||||||||
|
Аннотация: <span class='lineQuote level2'>G>>как понимать const volatile и зачем оно такое нужно?</span><br />
<span class='lineQuote level1'><br />
ПК>volatile означает, что объект может изменяться как-то помимо действий программы, const — объект действиями программы через данный идентификатор не изменяется. const volatile — объект изменяется только "внешними" по отношению к программе с...</span> Ключевые слова: |
|||||||||||
12.12.2004
double - одинаковые вычисления, разные результаты
|
||||||||||||
|
Аннотация: Здравствуйте, Yozh_Programmer, Вы писали:<br />
<span class='lineQuote level1'><br />
Y_P>Почему этот код</span><br />
<span class='lineQuote level1'><br />
<br />
Y_P>[ccode]</span><br />
<span class='lineQuote level1'>Y_P>#include <windows.h></span><br />
<span class='lineQuote level1'>Y_P>#include <stdio.h></span><br />
<span class='lineQuote level1'>Y_P>#define _USE_MATH_DEFINES</span><br />
<span class='lineQuote level1'>Y_P>#include <math.h></span><br />
<span class='lineQuote level1'>Y_P>#include <conio.h></span><br />
<span class='lineQuote level1'><br />
Y_P>const double Log10 = log(10.0);</span><br />
<span class='lineQuote level1'><br />
Y_P>int main()</span><br />
<span class='lineQuote level1'>Y_P>{</span><br />
<span class='lineQuote level1'>Y_P> int x = 100;</span><br />
<span class='lineQuote level1'>Y_P> p...</span> Ключевые слова: |
|||||||||||
28.12.2008
HOWTO: Свой поток ввода-вывода
|
||||||||||||
|
Аннотация: Библиотека ввода-вывода языка С++ — достаточно спорное явление. Но, так или иначе, она существует, иногда используется, и надо как-то с этим жить. Ключевые слова: stream |
|||||||||||
02.01.2004
Q&A: lvalue и rvalue
|
||||||||||||
|
Аннотация: lvalue и rvalue - что это такое.
Ключевые слова: lvalue,rvalue |
|||||||||||
30.09.2002
Deep C++. Operation: static_cast
|
||||||||||||
|
Аннотация: Судя по группам новостей, посвященных C++, разница между четырьмя операторами приведения типа Ключевые слова: |
|||||||||||
29.03.2005
std::string as std::vector?
|
||||||||||||
|
Аннотация: Здравствуйте, Аноним, Вы писали:<br />
<span class='lineQuote level1'><br />
А>Здравствуйте, Аноним, Вы писали:</span><br />
<span class='lineQuote level2'><br />
А>>Гарантируется ли стандартом размещение элементов строки в непрерывном блоке памяти, как это сделано для вектора? И имеет ли строка нуль терминатор равный *(string.end()). Спасибо</span><br />
<span class='lineQuote level1'>А>Гарантируется если вызовешь c_str(), а в ...</span> Ключевые слова: |
|||||||||||
23.04.2002
undefined и unspecified: разница между операциями и функциям
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>К>Все совершенно верно про неопределенное поведение.</span><br />
<span class='lineQuote level1'>К><b>Любая функция с побочным эффектом</b> (а оператор автоинкремента таковым является) способна дать такой же результат.</span><br />
<br />
Не совсем так. Важным является тот факт, что несколько модификаций одного скалярного объекта оказались зажатыми между дву... Ключевые слова: |
|||||||||||
06.08.2004
Signed/unsigned comparison
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>NG>Объясните каким правилом разруливается ситуация сравнения знаковых/беззнаковых целых в следующем примере:</span><br />
<br />
Сравнения знакового и беззнакового делается как беззнаковое. Т.е. знаковое значение приводится к беззнаковому типу.<br />
<span class='lineQuote level1'><br />
NG> int i = -1;</span><br />
<span class='lineQuote level1'>NG> unsigned int ui = 10;</span><br />
<span class='lineQuote level1'><br />
NG> if (i < ui)</span><br />
<span class='lineQuote level1'>NG> {</span><br />
... Ключевые слова: |
|||||||||||
17.03.2003
unspecified != undefined
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>А>Какая между ними разница(unspecified и undefined)?</span><br />
<br />
Различается несколько вариантов поведения программ, выходящего за рамки стандарта: undefined, unspecified и implementation-defined.<br />
<br />
<b>Implementation-defined behavior (1.3.5)</b><br />
<br />
Самый мягкий вариант. Поведение программы при корректных вх... Ключевые слова: |
|||||||||||
23.04.2002
undefined и unspecified: разница между операциями и функциям
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>К>Все совершенно верно про неопределенное поведение.</span><br />
<span class='lineQuote level1'>К><b>Любая функция с побочным эффектом</b> (а оператор автоинкремента таковым является) способна дать такой же результат.</span><br />
<br />
Не совсем так. Важным является тот факт, что несколько модификаций одного скалярного объекта оказались зажатыми между дву... Ключевые слова: |
|||||||||||
10.12.2003
NULL или 0 ?
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>А>по C NULL машинно зависим т.е. может и не быть в представлении машины нулем,</span><br />
<span class='lineQuote level1'>А>а Страуструп пишет что можно безболезненно менять 0 на NULL. Что делать?</span><br />
<br />
Ты путаешь понятие "физического нуля" с понятием "логического нуля". <br />
<br />
Есть понятие null-pointer constant. И есть понятие null-pointer value... Ключевые слова: |
|||||||||||
30.04.2004
Вопрос новичка про виртуальный деструктор
|
||||||||||||
|
Аннотация: Здравствуйте, cppNewbie, Вы писали:<br />
<span class='lineQuote level1'><br />
N>Если инициализировать указатель родительского класса адресом объекта дочернего класса и объявить в родительском классе деструктор виртуальным, то при "разрушении" дочернего объекта через этот указатель сначала выполнится деструктор дочернего класса, а потом д...</span> Ключевые слова: |
|||||||||||
03.04.2003
А чисто виртуальные деструкторы - бывают?
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>Д> кажется мне, что нет... ведь деструктор наследника обязан вызвать деструктор</span><br />
<span class='lineQuote level1'>Д> базового класса. А что ему делать, если у базового класса деструктор не определен?</span><br />
<br />
Чисто виртуальные деструкторы бывают. В этом отношении деструкторы ведут себя так же, как и любые другие функции, за упомянутым ис... Ключевые слова: |
|||||||||||
28.08.2002
Смысл static
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>GR>Какой смысл несёт модификатор static для:</span><br />
<span class='lineQuote level1'>GR>1) переменных, объявленных внутри функции ???</span><br />
<span class='lineQuote level1'>GR>2) глобальных объектов ???</span><br />
<br />
static -- "перегруженное" ключевое слово C++.<br />
<br />
1) При объявлении члена класса (функции или переменной) ключевое слово static означает, что этот член класса является стат... Ключевые слова: |
|||||||||||
21.11.2004
Имена функций и указатели на функции
|
||||||||||||
|
Аннотация: Undead,<br />
<br />
<pre class='c'><code>> mem_fun( SomeClass::SomeFunction )</code></pre><br />
<span class='lineQuote level1'>> Ведь имя функции само по себе является указателем</span><br />
<br />
[list]<br />
<li /> Имя функции само по себе указателем не является, но, в целях совместимости с C, любое выражение, обозначающее "обычную" функцию (не функцию-член), может быть неявно ... Ключевые слова: |
|||||||||||
29.01.2004
Как работает C-style cast
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>К> Я правильно понимаю, что c-style cast — это компилятор </span><br />
<span class='lineQuote level1'> К> последовательно пробует сделать function cast, static_cast, </span><br />
<span class='lineQuote level1'> К> а если не получилось — то reinterpret_cast ?</span><br />
<br />
Почти.<br />
<br />
function cast с одним аргументом определяется как раз через c-style cast, поэтому его, вообще, рассматривать не... Ключевые слова: |
|||||||||||
07.12.2004
Какая разница между new T и new T()
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>А>Какая разница между</span><br />
<br />
<pre class='c'><code>A *ptr = <span class='kw'>new</span> B();</code></pre><br />
<span class='lineQuote level1'>А>и </span><br />
<pre class='c'><code>A *ptr = <span class='kw'>new</span> B;</code></pre><br />
В первом случае: выполняется value-initialization. Во втором случае: для не-POD класс типов выполняется default-initialization, а для остальных типов вообще никакой инициализации не делается.<br />
<br />
... Ключевые слова: |
|||||||||||
28.11.2004
Небольшой нюанс
|
||||||||||||
|
Аннотация: Статья о решении проблем, возникающих в, казалось бы, тривиальных ситуациях при использовании mixin-класса.
Ключевые слова: |
|||||||||||
25.10.2003
Наследование от классов без виртуального деструктора?
|
||||||||||||
|
Аннотация: Здравствуйте, Bell, Вы писали:<br />
<span class='lineQuote level1'><br />
B>В данном да. Но ИМХО всегда следует придеживаться определенных правил. При программировании на С++ самодисциплина играет далеко не самую последнюю роль.</span><br />
<br />
Правило "Не делать наследования от классов без виртуального деструктора" является одним из тех ложных правил... Ключевые слова: |
|||||||||||
26.07.2003
Разрушение статических объектов
|
||||||||||||
|
Аннотация: Здравствуйте, KPavel, Вы писали:<br />
<span class='lineQuote level1'><br />
K> Определяется ли порядок разрушения статических и глобальных объектов</span><br />
<span class='lineQuote level1'>K> порядком инициализации? Если да, то как — LIFO?</span><br />
<br />
Именно так. При этом, гарантируется, что разрушение будет происходить именно в таком порядке,<br />
независимо от того, в каких единицах транс... Ключевые слова: |
|||||||||||
25.02.2009
Обход графа наследования в C++
|
||||||||||||
|
Аннотация: В статье описывается быстрый и легкий способ определить, в какой последовательности будут вызываться конструкторы классов в иерархии любой сложности. Ключевые слова: |
|||||||||||
27.08.2008
Строка формата строки
|
||||||||||||
|
Аннотация: Ошибки, связанные с форматом строки, могут позволить злоумышленнику получить контроль над системой. Статья описывает примеры ошибочного использования printf()-подобных функций, а также возможные последствия таких ошибок. Ключевые слова: printf |
|||||||||||
08.08.2004
Поток и функция-член класса
|
||||||||||||
|
Аннотация: ethan hunt wrote:<br />
<span class='lineQuote level1'><br />
> Господа,</span><br />
<span class='lineQuote level1'>> извиняюсь за тупость, но почему в отдельный поток можно кидать только статическую функцию-член класса. До конца не понимаю (может из-за недосыпания).</span><br />
<br />
Потому, что статическая функция-член имеет такой же тип, как и обычная ф-ция (в отличее от нестатической фун-ции... Ключевые слова: |
|||||||||||
22.10.2003
Функции с переменным числом параметров
|
||||||||||||
|
Аннотация: Здравствуйте, nap2k, Вы писали:<br />
<span class='lineQuote level1'><br />
N>Как в С++ реализуется сабж (типа как в sprintf())</span><br />
Почитайте это.<br />
<br />
[q]<br />
Язык C++ вслед за С позволяет писать функции с переменным числом параметров. Одним из простых примеров может служить функция, вычисляющая среднее арифметическое своих аргументов. Другой уже... Ключевые слова: |
|||||||||||
30.10.2004
Шаблоны и модули
|
||||||||||||
|
Аннотация: В этой статье рассказывается о методах отделения реализации шаблона от его интерфейсной части и о том, как можно заставить это работать на популярных компиляторах наподобие MS Visual C++. Ключевые слова: templates |
|||||||||||
28.10.2005
Что вернёт sizeof?
|
||||||||||||
|
Аннотация: Здравствуйте, xexe2, Вы писали:<br />
<span class='lineQuote level1'><br />
X>Уважаемый ол, чему же именно равен размер объекта в куче?</span><br />
<br />
Собственно сначала отвечу про sizeof<br />
<br />
На самом деле для любого типа в C++ можно вычислить, кроме sizeof ещё один параметр -- выравнивание.<br />
Выравнивание -- это число, которому должны быть кратны смеще... Ключевые слова: |
|||||||||||
13.01.2005
Что есть traits?
|
||||||||||||
|
Аннотация: Здравствуйте, Аноним, Вы писали:<br />
<span class='lineQuote level1'><br />
А>И в чем их смысл? В частности char_traits, например.</span><br />
<br />
В расширении, группировке и обобщении инструментария, относящегося к тому или иному типу.<br />
<br />
Допустим, у нас есть некий класс T, и нам потребовалось добавить функциональность — приведение к целому и обратно... Ключевые слова: |
|||||||||||
STL |
||||||||||||
28.10.2004
map и удаление элементов.
|
||||||||||||
|
Аннотация: Wind:<br />
<span class='lineQuote level1'><br />
> std::map <int, СЛОЖНАЯ_СТРУКТУРА> <...> задача удаления не нужных записей <...></span><br />
<span class='lineQuote level1'>> 1) Перебираю каждый элемент списка на соответствие некоторым условиям</span><br />
<span class='lineQuote level1'>> 2) Встретился элемент, который нужно удалить — удалил его и продолжил искать далее</span><br />
<span class='lineQuote level1'>> Но вот незадача, после удаления элемента итерат...</span> Ключевые слова: |
|||||||||||
24.04.2006
std::ofstream, VC8 и русские пути
|
||||||||||||
|
Аннотация: Здравствуйте, Tuo_Bellas, Вы писали:<br />
<span class='lineQuote level1'><br />
T_B>VC8, XP SP2</span><br />
<br />
[ccode]<br />
#include <iostream><br />
#include <fstream><br />
<br />
int main()<br />
{<br />
std::ofstream os("тест.txt"); // (*)<br />
if (os)<br />
{<br />
os << "test";<br />
}<br />
<br />
std::ofstream osW(L"тест.txt"); // (**) Note unicode here<br />
if (osW)<br />
{<br />
osW << "te... Ключевые слова: |
|||||||||||
Адаптер обобщенного указателя на функцию-член класса
|
||||||||||||
|
Аннотация: Рассуждения на тему обобщения некоторых конструкций STL и неполной совместимости компиляторов со стандартом C++ Ключевые слова: |
|||||||||||
27.02.2002
Заметка о некоторых особенностях использования STL в DLL
|
||||||||||||
|
Аннотация: Если вы пытались работать с экземплярами классов STL, передавая их в DLL, или получая оттуда, а потом бросили это занятие из-за непонятных ошибок, возникающих в вашей программе, то эта заметка для вас. Даже если видимых проблем в вашей программе нет, то все равно прочитайте эту заметку, чтобы знать что делать, когда они появятся :) Ключевые слова: |
|||||||||||
28.09.2002
Скорость контейнеров и реализаций STL
|
||||||||||||
|
Аннотация: Вот результаты каких-то старых тестов, которые я писал при сравнении Dinkum C++ Std Library и STLport для нашей конторы. В качестве элементов — std::pair<int, int>. Компилятор VC++7.0 aka .NET, времена условные, в тиках процессора. Если к теме будет проявлен интерес — можно будет черкнуть статейку с... Ключевые слова: |
|||||||||||
31.10.2004
Создание эффективного контейнера для работы со списком больших размеров
|
||||||||||||
|
Аннотация: В статье приводится пример реализации нестандартного контейнера, позволяющего обеспечить приемлемую скорость доступа к произвольному элементу и вставки/удаления в произвольную позицию.
Ключевые слова: |
|||||||||||
14.03.2003
Индекс в vector по reverse_iterator
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>OE>что-то я туплю к вечеру — есть вектор, я в нем чем-то ищу, получаю iterator it, чтоб узнать индекс элемента делаю it — vect.begin(), теперь тоже для reverse_iterator — ищу от rbegin() до rend(), получаю reverse_iterator rit — что от чего надо отнять чтоб узнать индекс элемента на который указыва...</span> Ключевые слова: |
|||||||||||
13.10.2002
Как починить std::list.sort() для VC++6
|
||||||||||||
|
Аннотация: <span class='lineQuote level4'>А>>>>В MSVC 6.0, к сожалению, можно только специализировать std::greater для своего класса. Предикат передать не получится (если, конечно, не править хедер руками).</span><br />
<span class='lineQuote level1'><br />
peter>Вот он меня нафиг и посылает :no:</span><br />
<span class='lineQuote level1'>peter>Где править header?</span><br />
<br />
Заголовок <list> (измененные/добавленные строки выделены):<br />
[... Ключевые слова: |
|||||||||||
01.04.2004
Потокобезопасен ли класс std::vector ?
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>A>В МСДНе не понятно написано <img border='0' width='15' height='15' src='../Forum/images/frown.gif' /></span><br />
<br />
Класс или шаблон, аналогичный std::vector по интерфейсу, сделать "потокобезопасным" сам по себе невозможно по принципиальным соображениям. Например:<br />
[c]<br />
void f(std::vector<int>& v)<br />
{<br />
std::size_t sz = v.size();<br />
for (std::size_t i = 0; i < sz; ++i)<br />
std... Ключевые слова: |
|||||||||||
17.07.2008
Умные указатели в C++
|
||||||||||||
|
Аннотация: В этой статье приводится обзор инструментов, позволяющих избежать части проблем, связанных с использованием динамической памяти в C++. Описанные ниже инструменты и методики не являются панацеей от проблем управления памятью, они всего лишь способны облегчить жизнь программисту при условии правильного их использования. Эти инструменты носят общее название «умные указатели» («smart pointers»), что подразумевает их семантическое сходство с обыкновенными указателями C++. Ключевые слова: smartptr |
|||||||||||
Руководство по стандартной библиотеке шаблонов (STL) |
||||||||||||
Руководство по стандартной библиотеке шаблонов (STL)
|
||||||||||||
|
Аннотация: Стандартная Библиотека Шаблонов предоставляет набор хорошо
сконструированных и согласованно работающих вместе обобщённых компонентов
C++. Особая забота была проявлена для обеспечения того, чтобы все
шаблонные алгоритмы работали не только со структурами данных в библиотеке, но
также и с встроенны... Ключевые слова: |
|||||||||||
Руководство по стандартной библиотеке шаблонов (STL)
|
||||||||||||
|
Аннотация: Эти примеры демонстрируют использование нового продукта
STL<ToolKit> от компании ObjectSpace.
STL<ToolKit> - это самый простой способ
использования STL, который работает на большинстве комбинаций
платформ/компиляторов, включая cfront, Borland,
Visual C++, Set C++, ObjectCenter и последние
комп... Ключевые слова: |
|||||||||||
Boost |
||||||||||||
12.07.2007
Готовый Boost
|
||||||||||||
|
Аннотация: Здравствуйте, neFFy, Вы писали:<br />
<span class='lineQuote level2'><br />
H_C>>Люди, где можно мкачать уже скомпиленый boost. Я слышал, что есть сайт с инсьталяхой под Windows.</span><br />
<br />
<a class="m" href="http://www.boost-consulting.com/products/free" target="_blank">здесь</a><br />
<span class='lineQuote level1'><br />
FF>он что то еще докачивает?.</span><br />
<br />
Да, именно так. <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /> Сначала предлагает выбрать варианты библи... Ключевые слова: |
|||||||||||
24.02.2006
Library 9. Boost.Bind
|
||||||||||||
|
Аннотация: Рассматриваются все типовые случаи применения bind - связывание свободных функций, функций-членов класов, переменных-членов, виртуальных функций, а также функциональная композиция. На простом примере поясняется идея, лежащая в основе реализации bind. Ключевые слова: boost,bind |
|||||||||||
05.01.2006
boost и Linker error
|
||||||||||||
|
Аннотация: Ignoramus wrote:<br />
<span class='lineQuote level1'>> I>>Однако линкер вижуал студио по-прежнему ругается. Как заставить его </span><br />
<span class='lineQuote level1'>> "увидеть" либ-файлы?</span><br />
<span class='lineQuote level1'>> K>прописать в свойствах либо проекта либо IDE пути к либам.</span><br />
<span class='lineQuote level1'>> Каждую либу отдельно? Которые в разных папочках рассортированы? </span><br />
<br />
bjam при инсталяции копирует все либы в одну папку... Ключевые слова: |
|||||||||||
29.03.2007
boost::filesystem::patch error
|
||||||||||||
|
Аннотация: Здравствуйте, denaturat, Вы писали:<br />
<span class='lineQuote level1'><br />
D>1. Строка </span><br />
<span class='lineQuote level1'>D>boost::filesystem::path mypath("C:\\test.txt");</span><br />
<span class='lineQuote level1'>D>кидает исключение filesystem_error с флагом other_error</span><br />
<span class='lineQuote level1'>D>то же самое, если сначала сделать так:</span><br />
<span class='lineQuote level1'>D>boost::filesystem::path mypath;</span><br />
<span class='lineQuote level1'>D>а только затем так:</span><br />
<span class='lineQuote level1'>D>mypath = "C:\\test.txt";</span><br />
<br />
Хм, чис... Ключевые слова: |
|||||||||||
06.09.2010
Библиотека boost::signals2 изнутри
|
||||||||||||
|
Аннотация: В статье описывается внутреннее строение boost-библиотеки signals2. Описываются архитектурные решения, применённые в ней. Приводятся сигнатуры классов, их назначение. Объясняется взаимодействие различных компонентов при выполнении вызовов пользователя. Ключевые слова: boost; signals2; signal; slot; метапрограммирование; отложенный вызов |
|||||||||||
05.06.2004
Что за библиотека BOOST
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>R><a class="m" href="http://www.boost.org" target="_blank">где она находится</a> я нашел, меня интересовало что </span><br />
<span class='lineQuote level1'>R>это и с чем её едят</span><br />
... цитирую при жизни <img border='0' width='15' height='15' src='../Forum/images/biggrin.gif' /><br />
<br />
[q]<br />
... boost заметно удешевляет разработку продуктов, а также близкое знакомство разработчиков с этой библиотекой воспитывает, учит их правильному минималистичес... Ключевые слова: |
|||||||||||
08.02.2006
Можно забиндить конструктор?
|
||||||||||||
|
Аннотация: Здравствуйте, Ароан, Вы писали:<br />
<span class='lineQuote level2'><br />
PC>>Нет нельзя. Т.к. ты уже используешь буст вместо написания велосипеда можешь использовать <a class="m" href="http://www.boost.org/boost/lambda/construct.hpp" target="_blank">http://www.boost.org/boost/lambda/construct.hpp</a> (в хэдере ничего лишнего из boost.lambda).</span><br />
<span class='lineQuote level1'><br />
А>Следующий код выдает ошибку 'result_type' : is not a member of 'boost::lambd...</span> Ключевые слова: |
|||||||||||
17.07.2008
Умные указатели в C++
|
||||||||||||
|
Аннотация: В этой статье приводится обзор инструментов, позволяющих избежать части проблем, связанных с использованием динамической памяти в C++. Описанные ниже инструменты и методики не являются панацеей от проблем управления памятью, они всего лишь способны облегчить жизнь программисту при условии правильного их использования. Эти инструменты носят общее название «умные указатели» («smart pointers»), что подразумевает их семантическое сходство с обыкновенными указателями C++. Ключевые слова: smartptr |
|||||||||||
Динамически занимаемая память |
||||||||||||
07.10.2002
Автоматическое выделение памяти
|
||||||||||||
|
Аннотация: Исходные тексты классов Ключевые слова: |
|||||||||||
08.04.2003
Автоматическое выделение памяти
|
||||||||||||
|
Аннотация: Эти классы родились по многочисленным просьбам трудящихся программистов сообщества RSDN. Они не являются аналогами CAutoBufBase и CAutoBuf<> соответственно, и предназначены совершенно для других задач. Они могут серьезно упростить код, который должен работать с большими массивами данных, затрачивая минимум ресурсов (памяти). Другими словами, память будет выделяться тогда, когда нужно, и в том объеме, в котором нужно. Ключевые слова: SEH,CVirtualBufBase,CVurtualBuf<>,EXCEPTION_EXECUTE_HANDLER,EXCEPTION_CONTINUE_SEARCH,EXCEPTION_CONTINUE_EXECUTION |
|||||||||||
26.11.2002
QuickHeap
|
||||||||||||
|
Аннотация:
Демонстрационный проект (VC7, C#)
Ключевые слова: |
|||||||||||
01.08.2004
Когда использовать динамическую память
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>_L_>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу:</span><br />
<span class='lineQuote level1'>_L_><pre class='c'><code>_L_>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_></code></pre></span><br />
<span class='lineQuote level1'>_L_>Потому и возник ламерский вопрос. <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /></span><br />
<br />
Динамическа... Ключевые слова: |
|||||||||||
18.11.2002
Реализация сборки мусора на С++
|
||||||||||||
|
Аннотация: В данной статье мы рассмотрим обобщённую реализацию сборки мусора на С++. Будут обсуждены два конкретных алгоритма сборки мусора – “Mark-Sweep” и “Mark-Compact”, и их реализация. Мы также рассмотрим ограничения, которые накладываются на приложения при использовании сборки мусора, и изменения в компи... Ключевые слова: |
|||||||||||
10.12.2002
Статистика использования памяти. Реализация в ascLib.
|
||||||||||||
|
Аннотация: Иногда на этапе окончательной отладки кажется, что программа работает безошибочно… но как-то слишком медленно. Конечно, можно посоветовать заказчику сделать очередной upgrage, но вряд ли подобное предложение его обрадует. Поэтому, лучше для начала попытаться понять, что же приводит к замедлению рабо... Ключевые слова: |
|||||||||||
15.07.2002
Нельзя определить размер динам. массива, хотя delete[] есть
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>E>Логика: <b>мы</b> не можем ..., а <b>компилятор</b> — может, меня и смутила.</span><br />
<span class='lineQuote level1'>E>Вопрос произошел от указанной темы об определении размера массива, поэтому и стало интересно, кто чего может. То есть я перефразировал бы свою мысль следующим образом: почему компилятор имеет средства для определения р...</span> Ключевые слова: |
|||||||||||
04.02.2006
Почему malloc() выделяет 4K минимум?
|
||||||||||||
|
Аннотация: Здравствуйте, unz0r, Вы писали:<br />
<span class='lineQuote level1'><br />
U>В смысле? Я сделал маленький тестовый проект — в нем malloc(1) ест 16 байт. Но в большом проекте — 4Kb.</span><br />
<span class='lineQuote level1'>U>Но вообще что-то непонятное происходит. Если я _переименовываю_ полученный .exe файл проекта, например на X.exe, то магическим образом malloc(1) вместо 4Kb ...</span> Ключевые слова: |
|||||||||||
Размещение объектов в оперативной памяти. Понятие указателя |
||||||||||||
03.01.2011
Размещение объектов в оперативной памяти. Понятие указателя
|
||||||||||||
|
Аннотация: Рассмотрены вопросы организации памяти в С++, базовые принципы управления ею, основы работы с указателями. Представление рассматриваемых конструкций и понятий осуществляется с позиций их реализации, внутреннего устройства, что позволяет не только запомнить, как работает тот или иной оператор, та или иная конструкция, но и понять, почему они работают именно так. Ключевые слова: C++; объекты; указатели; память; стек; динамическая память; утечка памяти; new; delete; |
|||||||||||
15.07.2011
Размещение объектов в оперативной памяти. Понятие указателя. Часть 2.
|
||||||||||||
|
Аннотация: Рассмотрены вопросы организации памяти в С++, базовые принципы управления ею, основы работы с указателями. Представление рассматриваемых конструкций и понятий осуществляется с позиций их реализации, внутреннего устройства, что позволяет не только запомнить, как работает тот или иной оператор, та или иная конструкция, но и понять, почему они работают именно так. Ключевые слова: C++; объекты; указатели; массивы; память; стек; динамическая память; утечка памяти; new; delete; |
|||||||||||
17.07.2008
Умные указатели в C++
|
||||||||||||
|
Аннотация: В этой статье приводится обзор инструментов, позволяющих избежать части проблем, связанных с использованием динамической памяти в C++. Описанные ниже инструменты и методики не являются панацеей от проблем управления памятью, они всего лишь способны облегчить жизнь программисту при условии правильного их использования. Эти инструменты носят общее название «умные указатели» («smart pointers»), что подразумевает их семантическое сходство с обыкновенными указателями C++. Ключевые слова: smartptr |
|||||||||||
Макросы |
||||||||||||
01.12.2001
Как вставлять в программу на C++ двоичные константы?
|
||||||||||||
|
Аннотация: В языке C++ есть восьмеричные, десятичные и шестнадцатеричные константы. А двоичных - нет. Тем не менее, при помощи препроцессора можно соорудить макрос, который позволит нам смоделировать такие константы. Основная идея - преобразовывать восьмеричную константу в двоичную, выделяя из неё отдельные ци... Ключевые слова: |
|||||||||||
01.04.2001
Как задать переменное число параметров в #define?
|
||||||||||||
|
Аннотация:
Этот способ предложил Dmitry A. Senkevich (2:5020/1300) в конференции RU.VISUAL.CPP,
сорвав при этом бурные и продолжительные аплодисменты.
Ключевые слова: |
|||||||||||
27.04.2003
## и # в макросах
|
||||||||||||
|
Аннотация: Здравствуйте, Аноним, Вы писали:<br />
<span class='lineQuote level1'><br />
А>В статье по реализации делегатов на С++ надо было получить лексему через макросы:</span><br />
<span class='lineQuote level1'><br />
А>[ccode]</span><br />
<span class='lineQuote level1'>А>#define SUFFIX 5</span><br />
<span class='lineQuote level1'><br />
А>#define COMBINE(a,b) COMBINE1(a,b)</span><br />
<span class='lineQuote level1'>А>#define COMBINE1(a,b) a##b</span><br />
<span class='lineQuote level1'><br />
А>#define I_DELEGATE COMBINE(IDelegate, SUFFIX)</span><br />
<span class='lineQuote level1'>А>#def...</span> Ключевые слова: |
|||||||||||
Манипуляции с битами |
||||||||||||
07.05.2003
Посчитать биты занимаемые числом.
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>VD>Можно ли без цикла посчитать количество битов требуемое для представления числа?</span><br />
<span class='lineQuote level1'>VD>Ну, то есть вместо этого:</span><br />
<span class='lineQuote level1'><br />
VD><pre class='c'><code>VD><span class='kw'>int</span> iResidue = <span class='kw'>sizeof</span>(array) / <span class='kw'>sizeof</span>(array[0]);
VD><span class='kw'>for</span>(; iResidue; iBits++)
VD>{
VD> iResidue >>= 1;
VD> iBits++;
VD>}
VD></code></pre></span><br />
<span class='lineQuote level1'><br />
VD>Написать константное выр...</span> Ключевые слова: |
|||||||||||
Массивы |
||||||||||||
03.01.2004
char* или char[]
|
||||||||||||
|
Аннотация: Здравствуйте, kliff, Вы писали:<br />
<br />
<b>const char * sz = "TEXT";</b><br />
<span class='lineQuote level1'>K>выделяется память под указатель на строку находящуюся в отсеке RO (память на строку выделена на этапе компиляции, а под переменная в рантайме на стеке)</span><br />
<br />
Около того. Литерал "TEXT" <i>может быть</i> размещен в read-only памяти, ... Ключевые слова: |
|||||||||||
27.01.2007
delete и delete[ ]
|
||||||||||||
|
Аннотация: Здравствуйте, CompileError, Вы писали:<br />
<span class='lineQuote level1'><br />
CE>Правда ли, что если создать массив объектов, то при его удалении с помощью операции delete не будут вызваны деструкторы для каждого из элементов массива (обязательно надо использовать delete[ ] )? </span><br />
<br />
Есль речь идет о массиве в динамической памяти, то уда... Ключевые слова: |
|||||||||||
23.06.2004
Как передать N-мерный массив в функцию?
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>А>Вот этот код не компилируется:</span><br />
<span class='lineQuote level1'><br />
А>[ccode]#include "stdafx.h"</span><br />
<span class='lineQuote level1'><br />
А>int matrix[2][2] =</span><br />
<span class='lineQuote level1'>А>{</span><br />
<span class='lineQuote level1'>А> 1, 2,</span><br />
<span class='lineQuote level1'>А> 3, 4</span><br />
<span class='lineQuote level1'>А>};</span><br />
<span class='lineQuote level1'><br />
А>void test(int *pM)</span><br />
<span class='lineQuote level1'>А>{</span><br />
<span class='lineQuote level1'>А> printf("%d", pM[1][0]); // error C2109</span><br />
<span class='lineQuote level1'>А>}</span><br />
<span class='lineQuote level1'><br />
А>int _tmain(int argc, _TCHAR* argv[])</span><br />
<span class='lineQuote level1'>А>{</span><br />
<span class='lineQuote level1'>А> test(matrix); // error C2664</span><br />
<span class='lineQuote level1'>А> retur...</span> Ключевые слова: |
|||||||||||
Библиотеки |
||||||||||||
09.09.2002
Инициализация ресурсов, помещенных в статическую библиотеку
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>А>Столкнулся с проблемой которую самостоятельно уже не могу решить.</span><br />
<span class='lineQuote level1'><br />
А>Проблема:</span><br />
<span class='lineQuote level1'>А>Есть статический экземляр класса, задача которого инициализировать данные при загрузке программы, пока файл в котором обьявлен этот экземпляр находится непосредственно в проекте, все работает на ура, но как только ...</span> Ключевые слова: |
|||||||||||
21.09.2011
Кроссплатформенное взаимодействие с устройствами ввода-вывода
|
||||||||||||
|
Аннотация: В статье рассказывается о первом этапе разработки семейства кроссплатформенных библиотек UNIO для унифицированного взаимодействия с устройствами ввода-вывода. Рассматривается реализация новой библиотеки UNIPRINT для унифицированного взаимодействия с устройствами печати. Ключевые слова: кроссплатформенность; унификация; интерфейс программирования; внешний интерфейс; устройство ввода-вывода; библиотека; класс; объект; функция; шаблон; C++; STL; Win API; CUPS |
|||||||||||
Строки в С и С++ |
||||||||||||
28.12.2003
Строки в С и С++
|
||||||||||||
|
Аннотация: Это первая часть, в которой обсуждаются «традиционные» строки в С. В С++ существуют более удобные механизмы для работы со строковыми данными, эти механизмы рассматриваются во второй части статьи. А зачем вообще обсуждать неудобные С-строки, если есть С++? К сожалению, совсем забыть о строках в стиле С нельзя по двум причинам:
1. существует большое библиотек (например, API операционных систем) работающих именно с С-строками
2. строковые классы в С++ все равно основаны на традиционных С-строках, и если мы хотим разобраться в том, как они работают, нам придется понимать их основы.
Ключевые слова: |
|||||||||||
18.08.2003
Сравнение std::string без учета регистра
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>Y> Мне надо сравнить два std::string без учета регистра. Я написал свою</span><br />
<span class='lineQuote level1'>Y> функцию сравнения, все вроде Ok, но меня мучает такой вопрос: есть ли</span><br />
<span class='lineQuote level1'>Y> стандартные средства (библиотечные) для такого сравнения?</span><br />
<br />
Если подробно и "правильно", там все очень долго и сложно, т.к. преобразование символов<br />
... Ключевые слова: |
|||||||||||
Язык Си в вопросах и ответах. |
||||||||||||
16.01.2003
Язык Си в вопросах и ответах
|
||||||||||||
|
Аннотация: <b>Предисловие составителя</b><br />
<br />
Для всех, кто задавался вопросами о странностях языков Си и C++. Must read!<br />
<br />
Несмотря на то, что год издания — 1995. Книга актуальна, потому что количество граблей — монотонно возрастающая функция <img border='0' width='15' height='15' src='../Forum/images/smile.gif' /><br />
<br />
Главы оформлены как ветки этой темы. Разворачивайте и смотрит... Ключевые слова: |
|||||||||||
1. Нулевые указатели |
||||||||||||
16.01.2003
1. Нулевые указатели
|
||||||||||||
|
Аннотация: <i>От составителя.</i><br />
<br />
Эта глава обсуждает внутреннюю реализацию нулевых указателей. Для большинства, наверное, она имеет лишь академический характер, так сказать, для расширения кругозора (поскольку на популярных платформах NULL — это 0). Тем не менее, если вы натолкнулись на "странности" с нуле... Ключевые слова: |
|||||||||||
16.01.2003
1.1. Что такое нулевые указатели
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Расскажите все-таки о пресловутых нулевых указателях.<br />
<br />
<b>Ответ:</b><br />
<br />
Для каждого типа указателей существует (согласно определению языка) <b>особое значение</b> — "нулевой указатель", которое отлично от всех других значений и не указывает на какой-либо объект или функцию. Таким об... Ключевые слова: |
|||||||||||
16.01.2003
1.2. Как 'получить' нулевой указатель?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Как "получить" нулевой указатель в программе?<br />
<br />
<b>Ответ:</b><br />
<br />
В языке С константа 0, когда она распознается как указатель, преобразуется компилятором в нулевой указатель. То есть, если во время инициализации, присваивания или сравнения с одной стороны стоит переменная или выражени... Ключевые слова: |
|||||||||||
16.01.2003
1.3. Что такое NULL
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Что такое NULL и как он определен с помощью #define?<br />
<br />
<b>Ответ:</b> <br />
Многим программистам не нравятся нули, беспорядочно разбросанные по программам.<br />
По этой причине макрос препроцессора NULL определен в <stdio.h> или <stddef.h> как значение 0 (или (void *) 0, об этом значении пого... Ключевые слова: |
|||||||||||
16.01.2003
1.4. NULL на машинах с ненулевым представлением
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Как #define должен определять NULL на машинах, использующих ненулевой двоичный код для внутреннего представления нулевого указателя?<br />
<br />
<b>Ответ:</b><br />
Программистам нет необходимости знать внутреннее представление(я) нулевых указателей, ведь об этом обычно заботится компилятор. Если м... Ключевые слова: |
|||||||||||
16.01.2003
1.5. #define NULL (char*)0 ?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Пусть NULL был определен следующим образом:<br />
<pre class='c'><code> <span class='kw'>#define</span> NULL ((<span class='kw'>char</span> *)0)</code></pre><br />
Ознает ли это, что функциям можно передавать NULL без преобразования типа?<br />
<br />
<b>Ответ:</b><br />
В общем, нет. Проблема в том, что существуют компьютеры, которые используют различные внутренние представлен... Ключевые слова: |
|||||||||||
16.01.2003
1.6. #define Nullptr(type) (type*)0
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Я использую макрос<br />
<pre class='c'><code> <span class='kw'>#define</span> Nullptr(type) (type *)0</code></pre><br />
который помогает задавать тип нулевого указателя.<br />
<br />
<b>Ответ:</b><br />
Хотя этот трюк и популярен в определенных кругах, он стоит немного.<br />
Он не нужен при сравнении и присваивании; см. вопрос 1.2. Он даже не экономит букв... Ключевые слова: |
|||||||||||
16.01.2003
1.7. if(ptr) -- проверка на ненулевость
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Корректно ли использовать сокращенный условный оператор if(p) для проверки того, что указатель ненулевой? А что если внутреннее представление для нулевых указателей отлично от нуля?<br />
<br />
<b>Ответ:</b><br />
Когда С требует логическое значение выражения (в инструкциях if, while, for, do и для... Ключевые слова: |
|||||||||||
16.01.2003
1.8. Выбор между 'NULL' и '0'
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Если "NULL" и "0" эквивалентны, то какую форму из двух использовать?<br />
<br />
<b>Ответ:</b><br />
Многие программисты верят, что "NULL" должен использоваться во всех выражениях, содержащих указатели как напоминание о том, что значение должно рассматриваться как указатель.<br />
Другие же чувствуют, ч... Ключевые слова: |
|||||||||||
16.01.2003
1.9. Макрос NULL -- для переносимости программ?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Но не лучше ли будет использовать NULL (вместо 0) в случае, когда значение NULL изменяется, быть может, на компьютере с ненулевым внутренним представлением нулевых указателей?<br />
<br />
<b>Ответ:</b><br />
Нет. Хотя символические константы часто используются вместо чисел из-за того, что числа мог... Ключевые слова: |
|||||||||||
16.01.2003
1.10. Разберемся в терминах.
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Я в растерянности. Гарантируется, что NULL равен 0, а нулевой указатель нет?<br />
<br />
<b>Ответ:</b><br />
Термин "null" (нулевой) или "NULL" может не совсем обдуманно использоваться в нескольких смыслах:<br />
<br />
[list=1]<br />
<li /> <b>Нулевой указатель как абстрактное понятие языка</b>, определенное в [url... Ключевые слова: |
|||||||||||
16.01.2003
1.11. Почему так много путаницы с нулевыми указателями?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Почему так много путаницы связано с нулевыми указателями? Почему так часто возникают вопросы?<br />
<br />
<b>Ответ:</b><br />
Программисты на С традиционно хотят знать больше, чем это необходимо для программирования, о внутреннем представлении кода.<br />
Тот факт, что внутреннее представление нулевых у... Ключевые слова: |
|||||||||||
16.01.2003
1.12. Мне так и не понятна возня с нулевыми указателями
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Я все еще в замешательстве. Мне так и не понятна возня с нулевыми указателями.<br />
<br />
<b>Ответ:</b><br />
Следуйте двум простым правилам:<br />
<br />
<b>1.</b> Для обозначения в исходном тексте нулевого указателя, используйте "0" или "NULL".<br />
<br />
<b>2.</b> Если "0" или "NULL" используются как фактические... Ключевые слова: |
|||||||||||
16.01.2003
1.13. Не лучше ли зафиксировать внутреннее представление?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Учитывая всю эту путаницу, связанную с нулевыми указателями, не лучше ли просто потребовать, чтобы их внутреннее представление было нулевым?<br />
<br />
<b>Ответ:</b><br />
Если причина только в этом, то поступать так было бы неразумно, так как это неоправданно ограничит конкретную реализацию, кото... Ключевые слова: |
|||||||||||
16.01.2003
1.14. Где встречается ненулевое внутреннее представление?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Ну а если честно, на какой-нибудь реальной машине используются ненулевые внутренние представления нулевых указателей или разные представления для указателей разных типов?<br />
<br />
<b>Ответ:</b><br />
Серия Prime 50 использует сегмент 07777, смещение 0 для нулевого указателя, по крайней мере, для... Ключевые слова: |
|||||||||||
16.01.2003
1.15. Ошибка 'null pointer assignment'
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Что означает ошибка во время исполнения "null pointer assignment" (запись по нулевому адресу). Как мне ее отследить?<br />
<br />
<b>Ответ:</b><br />
Это сообщение появляется только в системе MS-DOS <i>(и в DOS-сессиях под Windows -- Кодт)</i> (см., следовательно, раздел 16) и означает, что произош... Ключевые слова: |
|||||||||||
2. Указатели и массивы |
||||||||||||
20.01.2003
2. Указатели и массивы
|
||||||||||||
|
Аннотация: 2.1. В одном файле у меня есть описание char a[6], а в другом я объявил extern char *a.<br />
Почему это не работает?<br />
<br />
2.2. Но я слышал, что char a[] эквивалентно char *a.<br />
<br />
2.3. Тогда что же понимается под "эквивалентностью указателей и массивов" в С?<br />
<br />
2.4. Тогда почему объявления указателей и масс... Ключевые слова: |
|||||||||||
20.01.2003
2.1. 'extern char* a' не соответствует 'char a'
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> В одном файле у меня есть описание char a[6], а в другом я объявил extern char *a. Почему это не работает? <br />
<br />
<b>Ответ:</b><br />
Декларация extern char *a просто не совпадает с текущим определением. <br />
Тип "Указатель-на-тип-Т" не равен типу "массив-типа-Т". Используйте extern char a[]. Ключевые слова: |
|||||||||||
20.01.2003
2.2. А разве char a[] не эквивалентно char* a ?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Но я слышал, что char a[] эквивалентно char *a.<br />
<br />
<b>Ответ:</b> <br />
Ничего подобного. (То, что Вы слышали, касается формальных параметров функций, см. вопрос 2.4.)Массивы — не указатели. Объявление массива "char a[6];" требует определенного места для шести символов, которое будет извес... Ключевые слова: |
|||||||||||
20.01.2003
2.3. Что значит эквивалентность указателей и массивов
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Тогда что же понимается под "эквивалентностью указателей и массивов" в С?<br />
<br />
<b>Ответ:</b><br />
Большая часть путаницы вокруг указателей в С происходит от непонимания этого утверждения. "Эквивалентность" указателей и массивов не позволяет говорить не только об идентичности, но и взаимозам... Ключевые слова: |
|||||||||||
20.01.2003
2.4. Взаимозаменяемость в качестве формальных параметров
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Тогда почему объявления указателей и массивов взаимозаменяемы в качестве формальных параметров?<br />
<br />
<b>Ответ:</b><br />
Оператор sizeof сообщает размер указателя, который на самом деле<br />
получает функция. (см. вопрос 2.4).<br />
<br />
Так как массивы немедленно превращаются в указатели, массив на сам... Ключевые слова: |
|||||||||||
20.01.2003
2.5. Массив - lvalue ?!
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Как массив может быть значением типа lvalue, если нельзя присвоить ему значение?<br />
<br />
<b>Ответ:</b><br />
Стандарт ANSI C определяет "модифицируемое lvalue", но массив к этому не относится.<br />
<br />
Смотри: ANSI Разд. 3.2.2.1 c. 37. Ключевые слова: |
|||||||||||
20.01.2003
2.6. sizeof неправильно определяет размер параметра?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Почему sizeof неправильно определяет размер массива, который передан функции в качестве параметра?<br />
<br />
<b>Ответ:</b><br />
Оператор sizeof сообщает размер указателя, который на самом деле получает функция. (см. <a class=" tips m" href="https://rsdn.orgrsdn.ru/forum/?mid=177696" rel="#qROCcj" title="2.4. Взаимозаменяемость в качестве формальных параметров">вопрос 2.4<div class="tooltip" id="qROCcj">Автор: Кодт<br />Дата: 20.01.03</div></a>). Ключевые слова: |
|||||||||||
20.01.2003
2.7. Массивы - это постоянные указатели?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Кто-то объяснил мне, что массивы это на самом деле только постоянные указатели.<br />
<br />
<b>Ответ:</b><br />
Это слишком большое упрощение. Имя массива — это константа, следовательно, ему нельзя присвоить значение, но массив — это не указатель, как должно быть ясно из ответа на [url=<a class="m" href="https://rsdn.orgrsdn.ru/" title="">www.rsdn.ru/</a>... Ключевые слова: |
|||||||||||
20.01.2003
2.8. Практическая разница между массивами и указателями?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> C практической точки зрения в чем разница между массивами и указателями?<br />
<br />
<b>Ответ:</b><br />
<br />
<b>Массивы</b> автоматически резервируют память, но не могут изменить расположение в памяти и размер.<br />
<br />
<b>Указатель</b> должен быть задан так, чтобы явно указывать на выбранный участок памят... Ключевые слова: |
|||||||||||
20.01.2003
2.9. Выражение 5[''abcdef''] ?!
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Я наткнулась на шуточный код, содержащий "выражение" 5["abcdef"].<br />
Почему такие выражения возможны в С?<br />
<br />
<b>Ответ:</b><br />
<br />
Да, Вирджиния, индекс и имя массива можно переставлять в С.<br />
Этот забавный факт следует из определения индексации через указатель, а именно, <b>a[e]</b> идентичн... Ключевые слова: |
|||||||||||
20.01.2003
2.10. Ошибка компиляции при передаче 2-мерного массива
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Мой компилятор ругается, когда я передаю двумерный массив функции, ожидающей указатель на указатель.<br />
<br />
<b>Ответ:</b><br />
<br />
Правило, по которому массивы превращаются в указатели, не может применяться рекурсивно. Массив массивов (т.е. двумерный массив в С) превращается в указатель на масс... Ключевые слова: |
|||||||||||
20.01.2003
2.11. Как передать 2-мерный массив неизвестного размера?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Как писать функции, принимающие в качестве параметра двумерные массивы, "ширина" которых во время компиляции неизвестна?<br />
<br />
<b>Ответ:</b><br />
<br />
Это непросто. Один из путей — передать указатель на элемент [0][0] вместе с размерами и затем симулировать индексацию "вручную":<br />
[c]<br />
f2(int* a... Ключевые слова: |
|||||||||||
20.01.2003
2.12. Как объявить указатель на массив?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Как объявить указатель на массив?<br />
<br />
<b>Ответ:</b><br />
<br />
Обычно этого делать не нужно. Когда случайно говорят об указателе на массив, обычно имеют в виду указатель на первый элемент массива.<br />
<br />
Вместо указателя на массив рассмотрим использование указателя на один из элементов массива.<br />
М... Ключевые слова: |
|||||||||||
20.01.2003
2.13. Разница между array и &array
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Исходя из того, что ссылки на массив превращаются в указатели, скажите в чем разница для массива<br />
<pre class='c'><code> <span class='kw'>int</span> array[NROWS][NCOLUMNS];</code></pre><br />
между array и &array?<br />
<br />
<b>Ответ:</b><br />
<br />
Согласно ANSI/ISO стандарту C, &array дает указатель типа "указатель-на-массив-Т", на весь массив (Cм. ... Ключевые слова: |
|||||||||||
20.01.2003
2.14. Как выделить память для многомерного массива?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Как динамически выделить память для многомерного массива?<br />
<br />
<b>Ответ:</b><br />
<br />
Лучше всего выделить память для массива указателей, а затем инициализировать каждый указатель так, чтобы он указывал на динамически создаваемую строку. Вот пример для двумерного массива:<br />
[c]<br />
int **array1 =... Ключевые слова: |
|||||||||||
18.08.2004
2.15. Равноправное использование стат. и дин. массивов
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Как мне равноправно использовать статически и динамически задаваемые многомерные массивы при передаче их в качестве параметров функциям?<br />
<br />
<b>Ответ:</b><br />
Идеального решения не существует. Возьмем объявления<br />
[c]<br />
int array[NROWS][NCOLUMNS];<br />
int **array1;<br />
int **array2;<br />
int *array3;... Ключевые слова: |
|||||||||||
18.08.2004
2.16. Трюк: массив, индекс которого начинается не с 0
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Вот изящный трюк: если я пишу<br />
<pre class='c'><code><span class='kw'>int</span> realarray[10];
<span class='kw'>int</span> *array = &realarray[-1];,</code></pre><br />
то теперь можно рассматривать "array" как массив, у которого индекс первого элемента равен единице.<br />
<br />
<b>Ответ:</b><br />
Хотя этот прием внешне привлекателен (и использовался в старых изданиях кн... Ключевые слова: |
|||||||||||
18.08.2004
2.17. Почему функция не изменяет указатель?
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> Я передаю функции указатель, который она инициализирует<br />
<pre class='c'><code>...
<span class='kw'>int</span> *ip;
f(ip);
...
<span class='kw'>void</span> f(ip)
<span class='kw'>int</span> *ip;
{
<span class='kw'>static int</span> dummy = 5;
ip = &dummy;
}</code></pre><br />
но указатель после вызова функции остается неизменным.<br />
<br />
<b>Ответ:</b><br />
Функция пытается изменить сам указатель, или ... Ключевые слова: |
|||||||||||
18.08.2004
2.18. Как инкрементировать char*, словно он указывает на int
|
||||||||||||
|
Аннотация: <b>Вопрос:</b> У меня определен указатель на char, который указывает еще и на int, причем мне необходимо переходить к следующему элементу типа int.<br />
Почему<br />
<pre class='c'><code>((<span class='kw'>int</span> *)p)++;</code></pre><br />
не работает?<br />
<br />
<b>Ответ:</b><br />
В языке С оператор преобразования типа не означает "будем действовать так, как будто э... Ключевые слова: |
|||||||||||
Практика |
||||||||||||
Метапрограммирование средствами шаблонов С++ |
||||||||||||
20.02.2012
Автоматическая генерация интерфейсов классов
|
||||||||||||
|
Аннотация: В статье предложено решение унификации функций доступа к внутренним переменным класса, рассмотрен вопрос локализации в одном файле типов переменных класса. Предложенное решение может быть актуальным для классов, содержащих большое количество внутренних переменных. Ключевые слова: Шаблонный интерфейс класса; классы свойств; классы стратегий |
|||||||||||
11.10.2002
Запись и чтение структур в/из файл(а)
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>ПА>Ламерский вопрос</span><br />
<br />
Почему ламерский? Нормальный вопрос, который обычно встречается большинству программеров.<br />
<span class='lineQuote level1'><br />
ПА>Есть у меня некая структура (struct).</span><br />
<span class='lineQuote level1'>ПА>Требуется создать файл, куда писать данные в виде этих структур. А также читать. А также перемещаться по файлу.</span><br />
<span class='lineQuote level1'>ПА>Как это сделать? (Плиз ...</span> Ключевые слова: |
|||||||||||
27.08.2003
Как наилучшим образом считать файл в буфер?
|
||||||||||||
|
Аннотация: <span class='lineQuote level1'>АШ>Хочу сравнить эффективность своего варианта с предложенным. Не сочтите за труд. Пусть входной файл будет в 1Mb.</span><br />
<br />
vc71, release, оптимизация по скорости.<br />
<br />
[ccode]<br />
// file2vect.cpp : Defines the entry point for the console application.<br />
//<br />
<br />
#include "stdafx.h"<br />
#include <Windows.h><br />
#include... Ключевые слова: |
|||||||||||
29.03.2005
Прочитать строку из файла через потоки
|
||||||||||||
|
Аннотация: Здравствуйте, Аноним, Вы писали:<br />
<span class='lineQuote level1'><br />
А>Что-то не могу понять, как коректно решить вот такую задачу:</span><br />
<span class='lineQuote level1'>А>есть текстовый файл, в нем записаны некоторые данные(числа, слова, разделенные пробелами)... Для чтения решил использовать потоки std::ifstream... Мне нужно пропустить(проигнорировать) N первых стро...</span> Ключевые слова: |
|||||||||||
06.04.2005
FILE* в памяти
|
||||||||||||
|
Аннотация: Здравствуйте, Зверёк Харьковский, Вы писали:<br />
<span class='lineQuote level1'><br />
ЗХ><i>В меру идиотский вопрос.</i></span><br />
<span class='lineQuote level1'>ЗХ>Возможен ли сабж? Т.е. возможно ли создать переменную типа FILE*, чтобы все fwrite в нее на самом деле писали в буфер в памяти?</span><br />
<span class='lineQuote level1'><br />
ЗХ>нужен JEPG в памяти; а libjpeg, зараза, либо через FILE*, либо какой-то кошмар...</span> Ключевые слова: |