Эффективная реализация конструктора контейнера типа std::vector.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Эффективная реализация конструктора контейнера типа std::vector.

Сообщение Anonymous »

Код: Выделить всё

std::vector
имеет конструктор вида

Код: Выделить всё

template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
Тогда как реализовать этот конструктор, если итератор не является произвольным?

Я придумал два кандидата...
  • В цикле вызовите push_back(*first)(предположим, push_back уже реализован), while first != Last .
  • Подсчитайте количество элементов по std::distance(first, Last),

    затем выделите достаточно памяти, затем скопируйте конструкцию всех элементов.
Что лучше?, или у вас есть другие идеи?
Дополнение:

Мне плохо, если итератор — это input_iterator, идея 2 даже невозможна.

Подробнее здесь: https://stackoverflow.com/questions/667 ... onstructor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»