STL vector: изменить размер() и назначить()

Имея члены класса std::vector<double> v и int n, в чем разница между использованием следующего в этом vector, который не инициализируется:

v.assign(n, 0.0);

или

v.resize(n, 0.0);

Ответ 1

Я предполагаю, что не инициализирован, вы имеете в виду, что он по умолчанию инициализирован, т.е. пустой вектор, затем

v.assign(n, 0.0);

и

v.resize(n, 0.0);

оба изменяют размер вектора на n и все элементы на 0.0. Обратите внимание, что для непустых векторов они обычно не совпадают, resize() устанавливает только новые элементы в 0.0.

Ответ 2

assign устанавливает размер n и все значения элементов равны 0.0, тогда как resize устанавливает размер n и только новые значения элементов равны 0.0.

Если v пуст заранее, они одинаковы, но assign, вероятно, понятнее.

Ответ 3

Назначение означает замену вектора новыми свойствами (размером и элементами) Reszie означает сохранение старых данных и расширение нового вектора новыми элементами, если новый размер больше старого. в противном случае уменьшите размер и устраните лишние.

Выполните следующий код дважды. Один для назначения второго для изменения размера (просто раскомментируйте первый).

#include <iostream>
#include <vector>


int main ()
{
  std::vector<int> vec1;


  vec1.assign(7,100);     
 // vec1.resize(7, 100);
  std::cout << "Size: " << vec1.size() << std::endl;
   for (unsigned int i(0); i < vec1.size(); ++i)
   {
      std::cout << vec1[i] << std::endl;
   }
   vec1.resize(4,5); 
  // vec1.assign(4,5); 
   std::cout << "\nSize: " << vec1.size() << std::endl;

   for (unsigned int i(0); i < vec1.size(); ++i)
   {
      std::cout << vec1[i] << std::endl;
   }

    vec1.resize(10,5); 
   //vec1.assign(10,5); 
   std::cout << "\nSize: " << vec1.size() << std::endl;

   for (unsigned int i(0); i < vec1.size(); ++i)
   {
      std::cout << vec1[i] << std::endl;
   }

   std::cin.get();
  return 0;
}