Удалить элементы вектора на основе индекса

Я хотел удалить элементы вектора на основе индекса, скажем, все четные индексированные элементы. Я читал об идиоме erase remove, но не могу понять, как ее применить. Вот что я попробовал:

    vector<int> line;
    line.reserve(10);
    for(int i=0;i<10;++i)
    {
      line.push_back(i+1);
    }
    for(unsigned int i=0;i<line.size();++i)
    {
      //remove the even indexed elements
      if(i%2 == 0)
      {
        remove(line.begin(),line.end(),line[i]);
      }
    }
line.erase( line.begin(),line.end() );

Это стирает весь вектор. Я надеялся удалить только те элементы, которые были помечены алгоритмом remove.

Затем я попробовал следующее

for(unsigned int i=0;i<line.size();++i)
    {
      //remove the even indexed elements
      if(i%2 == 0)
      {
        line.erase( remove(line.begin(),line.end(),line[i]),line.end() );
      }
    }

Это снова не работает, так как есть проблема при удалении, индексы, кажется, смещаются во время итерации по вектору. Каким должен быть правильный подход, чтобы решить эту задачу.

5
задан nikhil 8 December 2011 в 07:37
поделиться