Понимание вектора ::пример назначения на cplusplus

#c #vector #assign

Вопрос:

Меня смущает следующий код и то, что он делает:

 first.assign (7,100);             // 7 ints with a value of 100

std::vector<int>::iterator it;
it=first.begin() 1;

second.assign (it,first.end()-1); // the 5 central values of first
 

Я не понимаю этого second.assign утверждения. Я бы предположил, что он присваивает 100 элементам second значение 100. Почему размер second равен 5?

Ответ №1:

В примере кода

it = vec.begin() 1 значение 2-го элемента

И

 second.assign (it,first.end()-1);
                       ^^^^^^^^^^
 

Один за последним элементом.
в нем пропущены первый и последний элементы, и, следовательно, у вас есть 7-2 = 5 элементов в последнем назначении.

Ответ №2:

Существует 2 перегрузки assign (3 в C 11).

  • Первое назначение использует the new contents are n elements, each initialized to a copy of val.
  • 2-е назначение использует the new contents are elements constructed from each of the elements in the range between first and last, in the same order.

Поэтому 2-й присваивает копии first из 2-го элемента предпоследнему элементу.

Комментарии:

1. ага, понял, спасибо!