Apparently std::erase was added in C++20, but my compiler isn't letting me use it for some reason.
code
#include <iostream>
#include <vector>
#include <string>
#include <string.h>
using namespace std;
int main() {
int num1, num2 = 0;
cin >> num1;
cin >> num2;
int sum = num1 + num2;
vector<char> vec_num1(to_string(num1).begin(), to_string(num1).end());
vector<char> vec_num2(to_string(num2).begin(), to_string(num2).end());
std::erase(vec_num1, "0");
std::erase(vec_num2, "0");
int removezero1, removezero2, removezerosum = 0;
for (int v : vec_num1) {
removezero1 = removezero1 * 10 + v;
}
for (int v : vec_num1) {
removezero2 = removezero2 * 10 + v;
}
for (int v : vec_num1) {
removezerosum = removezerosum * 10 + v;
}
if (removezero1 + removezero2 == removezerosum)
{
cout << "YES";
}
else {
cout << "NO";
}
}
error
main.cpp:16:10: error: 'erase' is not a member of 'std' 16 | std::erase(vec_num1, "0"); | ^~~~~ main.cpp:17:10: error: 'erase' is not a member of 'std' 17 | std::erase(vec_num2, "0"); | ^~~~~
gcc version 12.2.0
As it follows from the error message
you are compiling the program by the compiler that uses C++17 features.
You need to say the compiler to use C++ 20 features as for example -std=c++20.
But in any case your code is wrong because at least in these declarations
there are used iterators of different sequences of temporary created objects. That is there are used invalid ranges.
You need to create intermediate string objects as for example
And the calls of the function std::erase are also wrong. For example instead of
you need to write
That is instead of string literals you have to use character literals because the value type of the vectors is
char.Also in this declaration
there is initialized by zero only the last declarator
removezerosum. You need to writeAlso the header
is redundant. Remove it.