Если вы ищете более понятный способ получения длины извлечения строки, эта библиотека имеет множество расширений для встроенных классов Swift http://www.dollarswift.org/#length
Используя эту библиотеку, вы можете просто сделать "Some Str".length
Проблема в том, что std :: endl
является шаблоном функции, так как ваш оператор <<
является. Итак, когда вы напишете:
my_stream << endl;
, вам понравится, чтобы компилятор выводил параметры шаблона для оператора
а также для endl
. Это невозможно.
Таким образом, вы должны написать дополнительные, не шаблонные, перегрузки оператора <<
для
работа с манипуляторами. Их прототип будет выглядеть так:
UIStream& operator<<(UIStream& os, std::ostream& (*pf)(std::ostream&));
(есть два других, заменив std :: ostream
на std :: basic_ios
и
std :: ios_base
, который вы также должны предоставить, если хотите разрешить все
манипуляторы) и их реализация будет очень похожа на одну из
ваши шаблоны. Фактически, настолько похожи, что вы можете использовать свой шаблон для
такая реализация:
typedef std::ostream& (*ostream_manipulator)(std::ostream&);
UIStream& operator<<(UIStream& os, ostream_manipulator pf)
{
return operator<< <ostream_manipulator> (os, pf);
}
И последнее замечание: часто лучше написать собственный streambuf
.
достичь того, чего пытаешься достичь, применяя технику, которую используешь.
Основное правило
Индексное сканирование
Когда SQL Server выполняет сканирование, он загружает объект, который он хочет прочитать с диска, в память, а затем читает этот объект сверху вниз в поисках записи, которые ему нужны.
Поиск индекса
Когда SQL Server выполняет поиск, он знает, где в индексе должны быть данные, поэтому он загружает индекс с диска, переходит непосредственно к той части индекса, которая ему нужна, и читает туда, где заканчиваются необходимые данные. Очевидно, что это намного более эффективная операция, чем сканирование, поскольку SQL уже знает, где находятся данные, которые он ищет.
Как я могу изменить план выполнения, чтобы использовать поиск вместо сканирования?
Когда SQL Сервер ищет ваши данные, вероятно, одна из самых важных вещей, которая заставит SQL Server переключиться с поиска на сканирование, - это когда некоторые из столбцов, которые вы ищете, не включены в индекс, который вы хотите использовать. Чаще всего в этом случае SQL Server возвращается к сканированию кластерного индекса, поскольку кластерный индекс содержит все столбцы в таблице. Это одна из основных причин (по крайней мере, на мой взгляд) того, что теперь у нас есть возможность ВКЛЮЧАТЬ столбцы в индекс, не добавляя эти столбцы в индексированные столбцы индекса. Включая дополнительные столбцы в индекс, мы увеличиваем размер индекса, но позволяем SQL Server читать индекс без необходимости возвращаться к кластеризованному индексу или к самой таблице для получения этих значений.
Ссылки
Для получения информации о специфике каждого из этих операторов в плане выполнения SQL Server см. ....
При сканировании индекса все строки в индексе сканируются, чтобы найти соответствующую строку. Это может быть эффективно для небольших столов. При поиске по индексу требуется только прикоснуться к строкам, которые действительно соответствуют критериям, и поэтому, как правило, более производительно
Сканирование индекса происходит, когда определение индекса не может найти в одной строке, чтобы удовлетворить предикатам поиска. В этом случае SQL Server должен просканировать несколько страниц , чтобы найти диапазон строк, который удовлетворяет предикатам поиска.
В случае поиска по индексу SQL Server находит одну предикаты поиска сопоставления строк с использованием определения индекса .
Поиск по индексу лучше и эффективнее.
Сканирование затрагивает каждую строку в таблице, даже если это то, что вам нужно или нет
Поиск смотрит только на те строки, которые вы ищете.
Всегда лучше иметь поиск, чем сканирование, поскольку он более эффективен в способе поиска данных.
Хорошее объяснение можно найти здесь