С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Arderun
1 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 17
#1

Удаление парных и не парных елементов в контейнере - C++

17.11.2011, 11:53. Просмотров 754. Ответов 4
Метки нет (Все метки)

Задача на удаление функцией erase() парных и не парных елементов из контейнеров. После компиляции программа на запуске выдает крит expression"this->_Has_container",0). Нюхом чую где-то erase удалять несуществующий элемент пытается но где понять не могу. ошибка точно в цыклах с условием. Проблемныю часть зацытировал

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "stdafx.h"
#include <iostream>
#include <sstream>
#include<conio.h>
#include<string>
#include<vector>
#include<list>
#include<Algorithm>
using std::vector;
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::list;
 
int _tmain(int argc, _TCHAR* argv[])
{ int  w, ia[]={0,1,1,2,3,5,8,13,21,55,89};
vector<int> va(ia,ia+11);
list<int> la(ia,ia+11);
for(vector<int>::iterator d=va.begin(); d!=va.end(); ++d)
    {cout << *d << " ";}
cout << endl;
 
for(list<int>::iterator d=la.begin(); d!=la.end(); ++d)
    {cout << *d << " ";}
cout << endl;
 
/*for(vector<int>::iterator d=va.begin(); d<va.end(); ++d)
{if((*d)%2){}
else{va.erase(d);}
}
 
for(list<int>::iterator d=la.begin(); d!=la.end(); ++d)
{if((*d)%2){la.erase(d);}} */
for(vector<int>::iterator d=va.begin(); d!=va.end(); ++d)
{cout << *d << " ";}
cout << endl;
for(list<int>::iterator d=la.begin(); d!=la.end(); ++d)
{cout << *d << " ";}
cout << endl;
 
w=_getch();
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2011, 11:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление парных и не парных елементов в контейнере (C++):

Подсчитать количество парных и не парных элементов в матрице - C++
Дано матрицу 10*10, подсчитать количество парных и не парных элементов

Удаление парных символов из строки - C++
Как удалить парные символы из множества &quot;w,r,q,t&quot; из заданной символьной строки?

Подсчет количества парных скобок - C++
Написать программу, которая сравнивает в строке между собой количество левых и правых парных символов (левых и правых круглых скобок ( ),...

Нахождение парных простых чисел с++ - C++
Дорогие форумчане прошу помощи. Парные простые числа.парными простыми числами называют два простых числа, разность которых равна...

Ранжирование проектов методом парных сравнений - C++
Добрый день, уважаемые форумчане! Столкнулся с такой проблемой. В общем, вот само задание: Компании требуются кадры в новый отдел....

Нахождение в матрице суммы парных элементов - C++
Прошу помочь, ни в какую не получается решить задание( В матрице найти сумму парных элементов,которые лежат выше главной диагонали.Если...

4
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
17.11.2011, 12:03 #2
а в дебаге посмотреть нельзя где выдает ошибку,?
0
Arderun
1 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 17
17.11.2011, 12:13  [ТС] #3
ошибки нет есть вылет. его нет ни в условии if ни в работе erase если его вынимать из цикла, ошибка точно в процессе выполнения for(vector<int>::iterator d=va.begin(); d<va.end(); ++d) va.erase(d); просто кусок кода настолько маленький что я не могу увидеть где..
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
17.11.2011, 12:18 #4
Arderun, При удалении элемента из массива итератор становится некорректным => ++d после erase(d) вызывает ошибку памяти. Либо используйте список, либо пишите d = va.erase(d) и тогда все будет ок.

Добавлено через 1 минуту
Пример.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
 
int main()
{
   std::vector<int> vec = {1,2,3,4,5,6,7,8};
   for (std::vector<int>::iterator iter = vec.begin(); iter != vec.end();)
   {
      if (!(*iter % 2))
      {
         iter = vec.erase(iter);
      }
      else
      {
         ++iter;
      }
   }
}
0
Arderun
1 / 1 / 0
Регистрация: 12.09.2011
Сообщений: 17
17.11.2011, 12:18  [ТС] #5
вот! спасибо! забыл забирать итератор у erase.
0
17.11.2011, 12:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 12:18
Привет! Вот еще темы с ответами:

Вычислить сумму парных элементов массива - C++
Задан массив из N элементов. Организовать его введение из клавиатуры или создания из случайных чисел по желанию пользователя, и вычислить...

Найдите количество парных цифр числа - C++
Найдите количество парных цифр числа. Желательно с заметками , что бы была возможность разобраться в задаче .

Найти количство парных элементов в матрице - C++
Здравствуйте господа. Очень прошу помочь мне сделать лабораторки по С++ ...... совершенно не владею данным языком. Вы моя последняя...

STL подсчет одинаковых парных элементов - C++
Доброго времени суток, есть задание, подсчитать кол-во одинаковых парных элементов, я выполнил задание... #include &lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.