Проблема с реализацией второй функции заключается в том, что если вектор пуст или элементов меньше, чем значение второго параметра, вы не можете использовать оператор индекса. В противном случае у вас будет неопределенное поведение.
Также есть логическая разница между реализациями.
В первой реализации функции новые элементы добавляются к уже существующим элементам вектора. Во второй реализации функции существующие элементы перезаписываются.
Но в любом случае обе реализации функции выглядят не очень хорошо. Вы можете сделать ту же операцию, используя один метод класса std :: vector.
Вот демонстрационная программа.
#include <iostream>
#include <iomanip>
#include <vector>
void reset( std::vector<bool> &v, size_t n, bool value = false )
{
v.assign( n, value );
}
int main()
{
std::vector<bool> v;
reset( v, 5);
for ( const auto item : v )
{
std::cout << std::boolalpha << item << ' ';
}
std::cout << '\n';
reset( v, 5, true );
for ( const auto item : v )
{
std::cout << std::boolalpha << item << ' ';
}
std::cout << '\n';
return 0;
}
Вывод программы:
false false false false false
true true true true true