413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787

вектор алгоритм erase

15.03.2013, 00:25. Показов 5889. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток.Пожалуйста подскажите чайнику.Пытаюсь из контейнера убрать лишние данные с помощью erase ,но ничего не получается.Пишет,что erase не объявлен.Что нужно еще подключать не знаю.У меня стоит code::dlock 10-05,возможно что то и не установлено.Пожалуйста подскажите кто сможет.
вот мой код
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
46
47
48
49
#include <iostream>
#include <vector>
#include <algorithm>
#include <windows.h>
#include <assert.h>
 
using namespace std;
 
int main()
{
int ia[] = { 0, 1, 0, 0, 0, 0, 0, 4, 0, 0 };
   vector< int > vec( ia, ia+10 );
   vector<int>::iterator it = vec.begin(), end_it = vec.end();
     SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
   cout << "Начальный массив: ";
   for ( ; it != end_it;  it++ ) cout << *it << ' ';
   cout << "\n\n";
 
   cout <<"последовательность не изменяется: нули не стоят рядом"<<"\n";
   unique( vec.begin(), vec.end() );
   it = vec.begin(); end_it = vec.end();
     for ( ; it != end_it; ++ it ) cout << *it << ' ';
      cout << "\n\n";
 
   // сортировка массива
   sort( vec.begin(), vec.end() );
 
   cout << "упорядоченный массив: ";
   it = vec.begin(); end_it = vec.end();
   for ( ; it != end_it; ++ it ) cout << *it << ' ';
      cout << "\n\n";
 
   cout <<"последовательность изменяется: нули  стоят рядом"<<"\n";
   unique( vec.begin(), vec.end() );
   it = vec.begin(); end_it = vec.end();
     for ( ; it != end_it; ++ it ) cout << *it << ' ';
      cout << "\n\n";
      // удалить из контейнера ненужные элементы
   cout << "удалить из контейнера ненужные элементы "<<"\n";
 
    erase( vec.begin(), vec.end() );
     it = vec.begin(); end_it = vec.end();
     for ( ; it != end_it; ++ it ) cout << *it << ' ';
      cout << "\n\n";
 
      return 0;
}
Все работает кроме удаления.
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2013, 00:25
Ответы с готовыми решениями:

Двумерынй вектор, удаление через erase
Есть двумерный вектор Clusters: std::vector &lt;std::vector &lt;int&gt; &gt; Clusters (ExternalSetV.size(), std::vector &lt;int&gt; (1)); Изначально...

Шаблон класса вектор с операциями индексации и функциями insert и erase
У меня есть задача. функции erase и insert я реализовала. но чтобы они работали нужно написать LOL&amp; operator(int); Задача звучит...

Алгоритм решения. Записать в вектор индексы элементов от максимального к минимальному
Добрый день. Подскажите пожалуйста алгоритм решения. Его суть - нужно записать в весктор индексы элементов от максимального к минимальному.

26
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.03.2013, 04:00
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от xtorne21st Посмотреть сообщение
Хочу заметить что учить английский также трудно/легко, как и сами плюсы.
если в школе не прогуливать - не сложно.
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
16.03.2013, 04:01
Цитата Сообщение от MrGluck Посмотреть сообщение
если в школе не прогуливать - не сложно.

Не по теме:

Хочу назад в школу и не прогуливать :)

0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
17.03.2013, 01:43  [ТС]
Только школу прогуливал лет этак 40 тому назад,а может и больше.Оставим это в покое.Трудно подсказать не надо.Только в то время мы не отставали и даже где то были впереди.Вот вам и карты в руки.Не прогуливайте чтобы сногва пойти вперед,а не назад как в последние годы.Извините.

Добавлено через 15 минут
PS кто не хочет учиться ищет причины,кто хочет- способы.

Добавлено через 12 часов 2 минуты
MrGluck еще раз огромное спасибо!К сожалению последнее ваше сообщение не удалось прочитать,а может и к лучшему ,со всеми своими вопросами разобрался кроме последнего.Но сейчас вроде скорость поднялась буду разбираться дальше.У меня интернет, без слез работать не возможно скорость 0-200кбит.Вот что у меня получилось
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
//удалить равные значения
#include <iostream>
#include <vector>
#include <algorithm>
#include <windows.h>
#include <iomanip>
#include <iterator>
 
 
void printV (double);
 
using namespace std;
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 double ia[] = { 0.5,1.1,-2.2,0.5,1.1,4.2,0.5,4.4,2.2,-3.05,
              5.5,1.1,4.2,3.3,-0.05,5.4,1.1,2.2,4.4,2,7.7,1.1 };
 
 vector<double> vec( ia, ia + sizeof(ia)/sizeof(*ia) );
 cout << "Начальный массив: " << "\n";
 copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
 cout << "\n\n";
 
        // удалить из контейнера не нужные элементы
 
  cout << "Полученный массив : "<<"\n";
  sort( vec.begin(), vec.end() );
  vector<double>::iterator uit = unique( vec.begin(), vec.end() );
  vec.erase( uit, vec.end() );
  copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
  cout << "\n\n";
 
return 0;
}
Я так понял,что с такой строкой
C++
1
copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
вывод с модификаторами setw и setprecision() не получится? В функцию вставить тоже не получилось.Так что поработать есть над чем.
Еще раз огромное спасибо.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
17.03.2013, 02:26
Цитата Сообщение от Genn55 Посмотреть сообщение
Я так понял,что с такой строкой
C++
1
copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
вывод с модификаторами setw и setprecision() не получится?
Отчего же это?
C++
1
copy(vec.begin(), vec.end(), ostream_iterator<double>(cout << setw(5) << setprecision(2), ", ") );
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
17.03.2013, 02:55  [ТС]
А у меня почему то не получилось,написал так же.Наверное все же была какая то ошибка.Уже не сравню-удалил.
Читаю про лямбда-функцию,если я правильно понял,переменной присваивается функция т.е это фактически переменная.У вас написано auto перед названием функции,но если она ничего не передает это же void ?А почему auto ?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
17.03.2013, 03:08
Genn55, это как бы анонимная функция, функция без названия. Но грубо говоря так.
auto - ключевое слово, позволяющее создать переменную типа инициализирующего значения, т.е. идентификатор типа определяется компилятором самостоятельно, в нашем случае это лямбда-функция. Тем не менее, сама по себе она не имеет названия.

Почитайте также про ключевое слово auto, если действительно интересно, но вообще то это уже необязательные надстройки, вам желательно сначала полностью понять как устроен код без них.
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
22.03.2013, 22:12  [ТС]
Добрый вечер!Если можно,еще вопрос.Вот моя программка бессмысленная,с помощью 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <iomanip>
#include <math.h>
#include <iterator>
#include <vector>
#include <algorithm>
#include <windows.h>
#include <numeric>
 
using namespace std;
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 const int size = 30;//объявляем статический массив на 30 элементов
   //и инициализируем или заполняем и сортируем
 double  A[size] ={0.25,0.28,0.3,0.315,0.335,0.355,0.38,0.4,0.45,0.5,0.53,0.56,0.6,0.63,
                 0.67,0.71,0.75,0.8,0.85,0.9,0.95,1.0,1.06,1.12,1.18,1.25,1.32,1.40,1.45,1.5};
 
 vector<double> vec( A, A + sizeof(A)/sizeof(*A) );
  double D;
  D = 1;
  cout << "Начальный массив: " << "\n\n";
  copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
  cout << "\n\n";
 //перезаписываем массив в интервале от 0.55 до 1.25
  vec.erase ( vec.begin(), vec.end() );
 for (int i = 0; i < size; i++)
     if(A[i] >= D*0.55 && A[i]<=D*1.25)
         vec.push_back (A[i]);//2)*(A[i]/2))*pi);
         cout << "Перезаполненный массив: " << "\n\n";
         copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
         cout << "\n\n";
//очистить массив от лишних элементов оставляем интервал от 0.71 до 1.12
//происходит смещение на 1 элемент влево от заданного
  cout << "Очищенный массив : "<<"\n\n";
 vector<double>::iterator dmin, dmax;
 double nmin ,nmax;
  nmax = 0.71;
  nmin = 1.12;
  dmax = find( vec.begin(), vec.end(), nmax);
  vec.erase(vec.begin(),dmax );
  dmin = find( vec. begin(), vec.end(), nmin);
  vec.erase(dmin,vec.end() );
  copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
  cout << "\n\n";
  //удаление интервала удаляется интервал от 0.8 до 1
    cout << " Массив с удаленным интервалом : "<<"\n\n";
 vector<double>::iterator dmin1, dmax1;
 double nmin1 ,nmax1;
 nmin1 = 0.8;
 nmax1 = 1;
    dmin1 = find( vec. begin(), vec.end(), 0.8);
    dmax1 = find( vec.begin(), vec.end(), 1);
    vec.erase(dmin1,dmax1 );
    copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
    cout << "\n\n";
//очистить массив
    cout << "Удаленный массив : "<<"\n\n";
    vec.erase ( vec.begin(), vec.end() );
    copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
    cout << "\n\n";
 
return 0;
 
}
Вот этот фрагмент работает не верно
C++
1
2
3
4
5
6
7
8
9
10
11
 cout << "Очищенный массив : "<<"\n\n";
 vector<double>::iterator dmin, dmax;
 double nmin ,nmax;
  nmax = 0.71;
  nmin = 1.12;
  dmax = find( vec.begin(), vec.end(), nmax);
  vec.erase(vec.begin(),dmax );
  dmin = find( vec. begin(), vec.end(), nmin);
  vec.erase(dmin,vec.end() );
  copy(vec.begin(), vec.end(), ostream_iterator<double>(cout,", ") );
  cout << "\n\n";
Происходит сдвиг на 1 элемент влево исправить я так и не смог.Я понимаю,что нумерация элементов идет с 0.Но ведь я же указываю на сам элемент а не на его номер.Пробовал принудительно смещать толку нет.В чем то я ошибаюсь или чего то не правильно понял.Пожалуйста подскажите.
И еще по алгоритмам.Есть ли такой алгоритм сложения в векторе сложить каждый элемент с каждым элементом или составлять свой?Пример последовательность 1, 2, 3.Всех комбинаций будет 9. 1+1,1+2,1+3,2+1,2+2,2+3 и т.д Те что я нашел либо дают всю сумму вектора ,либо слаживают вектора.
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2013, 22:12

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

vector::erase()?
есть вектор структур struct person{ string name; int age; vector &lt;person&gt; repw;

работа erase
написал вот такой код // Example program #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std; int...

Erase map
Добрый день, мне необходимо удалить из MAP некоторое количество элементов, сейчас я делаю это вот так, но как то не очень красиво for (i...

vector.erase
Помогите пожалуйста с синтаксисом удаления любого элемента из вектора Вот тут ошибка: #include &lt;vector.h&gt; void main() { ...


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

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

Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru