использование итераторов вставки без std :: copy

0

У меня есть итератор вставки и итератор к элементу, который я хочу вставить, но мне не разрешено использовать std::copy.

Это то, что я нашел на странице c++:

std::copy (bar.begin(),bar.end(),insert_it);

Это то, что я хочу сделать, но я не могу использовать std::copy. Есть ли другой способ?

Теги:
iterator

2 ответа

2
Лучший ответ
auto first = bar.begin();
auto last = bar.end();
while (first!=last)
{
  *insert_it = *first;
  ++insert_it;
  ++first;
}
  • 0
    Я с неохотой +1 это, потому что, хотя это в значительной степени реализация std::copy , не совсем ясно, что именно этого действительно хочет спрашивающий, и я думаю, что ответ должен содержать некоторое объяснение. (Я иногда виновен в простом сбрасывании кода, но я делаю это как комментарий и, по крайней мере, пытаюсь включить комментарии в код). Могу ли я предложить вам объяснить, как этот код работает, и как он может быть полезен для спрашивающего.
  • 0
    Вам не нужно разыменовывать insert_it если вы знаете, что его тип - insert_iterator .
Показать ещё 1 комментарий
0

Предоставляемый вами код перемещает содержимое с bar.begin() в bar.end() в итератор вставки. Я смущен тем термином, который вы использовали insert и std::copy не будет вставлять ничего, просто скопируйте контент.

Чтобы на самом деле вставить элементы в контейнер, вы можете использовать это:

your_container.insert(insert_it, bar.begin(),bar.end());

Здесь вы можете найти пример для std::vector http://en.cppreference.com/w/cpp/container/vector/insert/insert/

Надеюсь, это поможет, Раксван.

  • 0
    copy пишет в «итератор». Назначением может быть любой изменяемый тип итератора, включая OutputIterator. Итератор вставки вставляет. (Если у него есть доступ к контейнеру, ваше предложение лучше, но он сказал, что у него есть итератор вставки, а не контейнер.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню