Задача от упражнение 1 - Remove
Здравейте! Реших да пререша задачите от упражнението и на задача Remove се натъкнах на дребен проблем. Накратко условието беше да се направи масив, да се въведет число и това число да се изтрие на всяко място в масива, ако го съдържа. Аз вместо масив използвах вектор и реших да трия елемнт с vec.erase() функцията. Но всеки път като изтрие елемента, печата една 0 в края допълнителна. Предполагам това се поражда от факта, че на мястото на изтрития елемент добавя една 0, за да се запази размера, но нали затова ползвах вектор, за да е динамична промяната на размера. Ето кода:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int size = 0;
int number = 0;
cin >> size;
vector <int> vec(size);
const int vecSize = vec.size();
for (int i = 0; i < vecSize; i++)
{
cin >> vec[i];
vec.push_back(i);
}
cin >> number;
for (int i = 0; i < vecSize; i++)
{
if (number == vec[i])
{
vec.erase(vec.begin() + i);
}
}
cout << endl;
for (int i = 0; i < vecSize; i++)
{
cout << vec[i] << ' ';
}
return 0;
}
Прочети още веднъж внимателно какво е вектор http://www.cplusplus.com/reference/vector/vector/ и каква е разликата между вектор и масив. Тогава трябва да ти стане ясно защо е неправилно да използваш vecSize с вектори (но за масиви е ОК). И накрая потърси и прочети за така наречения 'erase-remove idiom' в C++ Ако имаш някакви въпроси, питай :)