1

I want to get number of elements before delete and after deleted in vector, how do i get? my input is using sentinel (-1) for separate input types. my input :

10 20 30 40 50 -1 1 3 4 -1

10,20,30,40,50 are element of vectors and 1,3,4 are index that i want to erase

output that i need:

number of elements before: 5

number of elements after deleted : 2

int i=0;
    int n;
    vector <int> v;
    cin >> n;
    while(n!=-1)
    {
        v.push_back(n);
        i++;
        cin >> n;
    }
    cout << "number of elements before: " << i << endl;

    int j=0;
    int x;
    while(j<i)
    {
        cin >> x;
        if(x==-1) break;
        v.erase(v.begin()+(x-1));
        j++;
    }
    cout << "number elements after deleted: " << v.size() << endl;

my program wont looping for erase element of vector. why this happened?

Newb
  • 19
  • 4
  • Please read [How To Debug Small Programs](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – alter_igel Apr 21 '21 at 16:26
  • 1
    Well, your code [doesn't compile](http://coliru.stacked-crooked.com/a/d789473df44f1abb) in 1st place. Could you [edit] your question and fiux that please! A [mcve] is a requirement here, when asking for debugging help. – πάντα ῥεῖ Apr 21 '21 at 16:27
  • When you run the program in your debugger and step through it line-by-line, what do you notice? – alter_igel Apr 21 '21 at 16:27
  • When you read `4` (the last index you want to delete) how many elements has your vector? – Lukas-T Apr 21 '21 at 16:30

1 Answers1

0

This does exactly what you wanted, but the problem is it does not retain the original order of elements, but it correctly gives you the size of the vector.

For reference: https://stackoverflow.com/a/3487736/9676206

#include <iostream>
#include <vector>

int main(void) {

  std::vector<int> v;
  std::vector<int> arr;

  int n;
  do {
    std::cin >> n;
    arr.push_back(n);
  } while (n != -1);
  n = 0;
  while (n != -1) {
    std::cin >> n;
    v.push_back(n);
  }
  v.pop_back();   // Removing last -1 value
  arr.pop_back(); // Removing last -1 value

  std::cout << "Number of elements before deleting: " << arr.size()
            << std::endl;

  for (size_t i = 0; i < v.size(); i++) {
    arr[i] = arr.back();
    arr.pop_back();
  }

  std::cout << "Number of elements after deleting: " << arr.size();

  for (size_t i = 0; i < arr.size(); i++) {
    std::cout << arr[i] << " ";
  }
  return 0;
}
Linux Geek
  • 957
  • 1
  • 11
  • 19