У меня есть следующий код для присвоения значения всем элементам вектора:
x = 100;
for (int i=0;i<vect.size();i++)
{
vect[i] = x;
}
Это достаточно просто, но я задаюсь вопросом, существует ли функция в STL, который делает то же самое; что-то как for_each, но для присвоения.
Используйте std :: fill
:
std::fill(vect.begin(), vect.end(), 100);
Обратите внимание, если вы хотите инициализировать вектор так, чтобы он имел одно и то же значение, вы можете использовать соответствующий конструктор:
std::vector<int> v(5, 100); // 5 elements set to 100
assign
можно использовать для «сброса вектора», но если вы просто создаете вектор, используйте конструктор.
vect.assign(n, x);
n
- количество элементов.
x
- значение для заполнения.
Отличие от std :: fill
в том, что для этого вы указываете длину. std :: fill
будет использовать предыдущую длину вектора. (Фактически, он будет использовать любой сегмент вектора, который вы ему укажете, но с помощью vect.begin ()
и vect.end ()
, как в приведенном выше примере, будет использоваться предыдущая длина.) В зависимости от ситуации вы захотите использовать одно или другое.