Имея члены класса std::vector<double> v
и int n
, в чем разница между использованием следующего в этом vector
, который не инициализируется:
v.assign(n, 0.0);
или
v.resize(n, 0.0);
Имея члены класса std::vector<double> v
и int n
, в чем разница между использованием следующего в этом vector
, который не инициализируется:
v.assign(n, 0.0);
или
v.resize(n, 0.0);
Я предполагаю, что не инициализирован, вы имеете в виду, что он по умолчанию инициализирован, т.е. пустой вектор, затем
v.assign(n, 0.0);
и
v.resize(n, 0.0);
оба изменяют размер вектора на n
и все элементы на 0.0
. Обратите внимание, что для непустых векторов они обычно не совпадают, resize()
устанавливает только новые элементы в 0.0
.
assign
устанавливает размер n
и все значения элементов равны 0.0, тогда как resize
устанавливает размер n
и только новые значения элементов равны 0.0.
Если v
пуст заранее, они одинаковы, но assign
, вероятно, понятнее.
Назначение означает замену вектора новыми свойствами (размером и элементами) 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;
}