2015-01-09 2 views
1

Примера: У меня есть класс MyClass, который состоит из 3-х частных атрибутов:Как удалить определенный элемент в списке на основе его позиция

  1. строка ITEMNAME
  2. количество поплавка дата
  3. строки

Затем я создаю список myClass

list<myClass> mytemp; 

В моей mytemp хранить несколько элементов внутри:

[ITEMNAME] [сумма] [дата]

  1. myproductA 10 011214

  2. myproductB 20 010115

  3. myproductC 30 020115

  4. myproductD 40 040115

Я хотел бы удалить myproductC

я в настоящее время:

list<myClass>::iterator p=mytemp.begin(); 

//productC would be list(3) 

p++; p++; p++; 

//therefore remove: 

mytemp.remove(p); 

Правильно ли я сказать, что? Однако p является итератором, но list::remove хочет получить значение.

Как решить эту проблему?

+2

Использовать список :: erase – BWG

+1

использовать 'std :: advance (mytemp, 3)' вместо увеличения итератора 3 раза. – PaulMcKenzie

+0

@PaulMcKenzie: 'mytemp' - это' list'. Передайте 'p' вместо' mytemp'. И он хочет удалить третий элемент, поэтому используйте '2' вместо' 3' ('p' первоначально указывает на 1-й элемент).'std :: advance (p, 2)' –

ответ

3

Если вы уверены, что целевой элемент в списке является третий элемент, то вместо этого кода

list<myClass>::iterator p=mytemp.begin(); 

//productC would be list(3) 

p++; p++; p++; 

//therefore remove: 

mytemp.remove(p); 

Вы можете заменить его с этим, если вы используете C++ 11 или более поздней версии:

mytemp.erase(std::next(mytemp.begin(), 2)); 

Или, если вы используете более старую версию:

list<myClass>::iterator p = mytemp.begin(); 
std::advance(p, 2); 
mytemp.erase(p); 

Чтобы использоватьили std::advance(), вам необходимо #include <iterator>.

Что касается метода remove(), он удаляет все элементы list, которые равны заданному значению.

+0

'std :: next()' является новым в C++ 11. Для более старых версий вы можете использовать 'std :: advance()' вместо этого. –

+0

@Remy Lebeau Большое спасибо. –

+0

Я конвертирую его в векторы! ха-ха спасибо в любом случае .. – isme

Смежные вопросы