Поскольку вы не копируете все значения из first_vector
в second_vector
, вам не следует инициализировать second_vector
для хранения того же количества элементов, что и first_vector
. Вы создаете больше элементов, чем хотите, где дополнительные элементы инициализируются значением 0
.
. Я бы предложил reserve()
с размером second_vector
вместо этого и затем использовал бы std::back_inserter
в качестве конечного итератора для копирования. Таким образом, second_vector
заканчивается только теми значениями, которые вы хотите передать, и ничего больше.
Это также устранит необходимость в переменной count_elem
. Вы можете использовать second_vector.size()
, чтобы узнать, сколько значений было помещено в вектор.
std::vector<int> first_vector = {2, 8, 50, 2, 4, 5, 9, 12};
std::vector<int> second_vector;
second_vector.reserve(4);
std::copy_if(
first_vector.begin(), first_vector.end(),
std::back_inserter(second_vector),
[&](int i){
return ((i != 2) && (second_vector.size() < 4));
}
);
Обратите внимание, однако, что использование std::copy_if()
будет проходить через весь first_vector
, оно будет не прекращайте итерацию, если 4 значения были переданы в second_vector
. Вместо этого было бы эффективнее просто запустить свой собственный l oop, чтобы вы могли сломать его как можно скорее:
std::vector<int> first_vector = {2, 8, 50, 2, 4, 5, 9, 12};
std::vector<int> second_vector;
second_vector.reserve(4);
for(int i : first_vector) {
if (i != 2) {
second_vector.push_back(i);
if (second_vector.size() == 4)
break;
}
}