Эта ограниченная форма интервальных функций позволяла выполнить интервальную вставку из vector
istream_iterator
vector
list
lw.assign(vw.rbegin(),vw.rend());// Присвоить lw содержимое vw
// (в обратном порядке);
// не компилируется в MSVC4-6!
SpeciаlContainer
scw.insert(scw.end(),lw.begin(),lw.end()); // Вставить в конец sew
// копию объектов Widget из lw:
// не компилируется в MSVC4-6!
Так что же делать, если вы работаете в среде MSVC4-6? Это зависит от используемой версии MSVC и того, вынуждены ли вы использовать реализацию STL, поставляемую вместе с компилятором.
Обходное решение для MSVC4-5
Еще раз посмотрим на правильный код, который не компилируется для реализации STL из поставки MSVC4-6:
vector
// из поставки MSVC4-6
list
lw.assign(vw.rbegin(),vw.rend());// То же
SpeciаlContainer
scw.insert(scw.end(),lw.begin(),lw.end()); // То же
// Создать итераторы begin и end
// для чтения объектов Widget
// из cn (см. совет 6).
// Прочитать объекты Widget
// из cin в vw (см. совет 6)
// не компилируется в MSVC4-6!
Несмотря на внешние различия, выделенные вызовы отвергаются компилятором по одной и той же причине: из-за отсутствия шаблонов функций класса в реализации STL. Соответственно и решение во всех случаях оказывается одним и тем же: замена вызовом сору с итератором вставки (см. совет 30). Ниже приведены обходные решения для всех примеров, приведенных ранее:
istream_iterator
vector
copy(begin,end,back_inserter(vw));//по умолчанию и скопировать
//в него объекты Widget из cin
list
lw.clear(); //Удалить из lw старые объекты:
copy(vw.rbegin(),vw.rend(),//скопировать объекты из vw
back_inserter(lw))://(в обратном порядке)
SpecialContainer
copy(lw.begin().lw.end().// Скопировать объекты Widget
inserter(scw.scw.end()));// из lw в конец sew
Я рекомендую использовать эти обходные решения с библиотекой, входящей в комплект поставки MSVC4-5. С другой стороны, будьте внимательны и не забывайте о том, что эти решения являются
Обходное решение для MSVC6
Обходное решение из предыдущего раздела подходит и для MSVC6, но в этом случае существует и другой вариант. Компиляторы MSVC4-5 не обладают полноценной поддержкой шаблонов функций класса, поэтому отсутствие этих шаблонов в реализации STL несущественно. В MSVC6 дело обстоит иначе, поскольку компилятор этой среды поддерживает шаблоны функций класса. Таким образом, возникает естественное желание заменить реализацию STL из поставки MSVC6 другой реализацией с шаблонами функций классов, предписанными Стандартом.