Actually the essence of the problem:
When executed, it gives an error:
Expression: vector iterator not incrementable. See the Visual C ++ documentation on asserts.
The problem in this line: arr.erase(it);
How to fix this error?
void DeleteZeros(std::vector<int>&arr) { for (std::vector<int>::iterator it = arr.begin(); it != arr.end(); ++it) { if (*it == 0) { arr.erase(it); } else { std::cout << "asdasdasd"<< std::endl; } } } Code:
#include "stdafx.h" #include <iostream> #include <vector> #include <algorithm> #include <iterator> //using namespace std; void MakeArr(std::vector<int>&arr) { for (int i = 0; i < arr.size(); i++) { arr[i]= rand() % 10; } } void show_vector(std::vector<int>&a) { for (std::vector<int>::iterator it = a.begin(); it != a.end(); ++it) std::cout << *it<<" "; } int*GetFreq1(int*arr, int size) { int*FreqArr=new int[size]; for (int i = 0; i < size; i++) { int Count = 1; for (int j = i + 1; j < size; j++) { if (arr[i] == arr[j]) { Count++; FreqArr[j] = 0; } } if (FreqArr[i] != 0) { FreqArr[i] = Count; } } std::cout << "\n Frequency of All the Elements in this Array are : \n" << std::endl; for (int i = 0; i < size; i++) { if (FreqArr[i] != 0) { std::cout << arr[i] << "occurs" << FreqArr[i] << "times" << std::endl; } } return FreqArr; } void DeleteZeros(std::vector<int>&arr) { for (std::vector<int>::iterator it = arr.begin(); it != arr.end(); ++it) { if (*it == 0) { arr.erase(it); //iterator is not incrementable //std::cout << "blyaa"; } } } int main() { int n; std::cout << "input count of elements :"; std::cin>>n; std::vector<int>arr(n); std::vector<int>n_i(n); MakeArr(arr); show_vector(arr); std::sort(arr.begin(), arr.end()); //variazijnyj ryad std::cout <<std::endl<<"Sorted Arr :" << std::endl; show_vector(arr); //n_i=getFreq(arr, n); int*sss = new int[n]; int*atatat = new int[n]; for (int i = 0; i < arr.size(); i++) { atatat[i] = arr[i]; } sss = GetFreq1(atatat, n); for(int i=0;i<arr.size();i++) { n_i[i] = sss[i]; } //std::unique(arr.begin(), arr.end());// building a table std::cout << "\n Ni table: " << std::endl; show_vector(n_i); DeleteZeros(n_i); show_vector(n_i); system("pause"); return 0; }