for_each, но для установки каждого элемента в значение в C ++ - PullRequest
5 голосов
/ 06 апреля 2010

У меня есть следующий код для присвоения значения всем элементам вектора:

x = 100;

for (int i=0;i<vect.size();i++)
{
    vect[i] = x;
}

Это достаточно просто, но мне интересно, есть ли функция в STL, которая делает то же самое; что-то вроде for_each, но для назначения.

Ответы [ 2 ]

10 голосов
/ 06 апреля 2010

Использование std::fill:

std::fill(vect.begin(), vect.end(), 100);

Обратите внимание: если вы хотите, чтобы вектор имел одинаковое значение, вы можете использовать соответствующий конструктор:

std::vector<int> v(5, 100); // 5 elements set to 100

assign можно использовать для «сброса вектора», но если вы просто создаете вектор, используйте конструктор.

7 голосов
/ 06 апреля 2010
vect.assign(n, x);

n - количество элементов.

x - это значение для заполнения.

Отличие от std::fill в том, что вы задаете длину для этого. std::fill будет использовать предыдущую длину вектора. (На самом деле, он будет использовать любой сегмент вектора, который вы ему скажете, но использование vect.begin() и vect.end(), как в приведенном выше примере, будет использовать предыдущую длину.) В зависимости от ситуации вы захотите использовать один или другой.

...