Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Genn55
370 / 217 / 41
Регистрация: 26.12.2012
Сообщений: 713
#1

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

15.03.2013, 00:25. Просмотров 1378. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 00:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос вектор алгоритм erase (C++):

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

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

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

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

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

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

26
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 867
Регистрация: 27.09.2012
Сообщений: 18,896
Записей в блоге: 3
Завершенные тесты: 1
15.03.2013, 00:50 #2
Цитата Сообщение от Genn55 Посмотреть сообщение
Пишет,что erase не объявлен.
erase - это метод контейнера
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
15.03.2013, 00:56 #3
Цитата Сообщение от Genn55 Посмотреть сообщение
erase( vec.begin(), vec.end() );
почти...vec.erase(); будет немного лучше
0
Genn55
370 / 217 / 41
Регистрация: 26.12.2012
Сообщений: 713
15.03.2013, 00:57  [ТС] #4
А что нужно сделать чтобы он работал?Компиллятор его принимает, по моему, как переменную поэтому так пишет.
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
15.03.2013, 00:58 #5
как только вы напишите условие задачи, так сразу вам помогут
0
Genn55
370 / 217 / 41
Регистрация: 26.12.2012
Сообщений: 713
15.03.2013, 01:04  [ТС] #6
У меня нет конкретной задачи.Я самостоятельно пытаюсь разобраться с вектором и с алгоритмами.В этом примере пытаюсь переписать все равные значения один раз.
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
15.03.2013, 01:06 #7
Цитата Сообщение от Genn55 Посмотреть сообщение
В этом примере пытаюсь переписать все равные значения один раз.
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
#include <algorithm>
#include <iterator>
#include <iostream>
#include <random>
#include <vector>
 
int main ()
{
    std::default_random_engine gen;
    std::uniform_int_distribution <> distr(0, 5);
 
    int vectorSize;
    std::cout << "Size of vector: ";
    std::cin >> vectorSize;
 
    std::vector <int> vector (vectorSize);
    std::cout << "Vector: " << std::endl;
    std::generate(vector.begin(), vector.end(), [&gen, &distr] () -> int {
        return distr(gen);
    });
    std::copy(vector.begin(), vector.end(), std::ostream_iterator <int> (std::cout, " "));
 
    std::cout << std::endl << "New vector: " << std::endl;
    std::sort(vector.begin(), vector.end());
    std::unique_copy(vector.begin(), vector.end(), std::ostream_iterator <int> (std::cout, " "));
 
    return 0;
}
0
Genn55
370 / 217 / 41
Регистрация: 26.12.2012
Сообщений: 713
15.03.2013, 01:21  [ТС] #8
Скопировал код.Вот что получилось
0
Вложения
Тип файла: docx Doc6.docx (78.2 Кб, 5 просмотров)
Genn55
370 / 217 / 41
Регистрация: 26.12.2012
Сообщений: 713
15.03.2013, 01:39  [ТС] #9
Почему то стал компеллиравть не код,а заголовочные функции.
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
// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
//
// Этот файл является частью GNU ISO C++. Настоящая библиотека распространяется бесплатно
// программное обеспечение; вы можете повторно распространять ее и/или модифицировать ее в соответствии
// условия GNU General Public License, опубликованной
// Free Software Foundation; либо версии 3, либо (по вашему выбору)
// любой более поздней версии.
 
// Эта библиотека распространяется в надежде, что она будет полезной,
// но БЕЗ всякой ГАРАНТИИ; даже без подразумеваемой гарантии
// Или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См.
// GNU General Public License for more details.
 
// В соответствии с Разделом 7 GPL версии 3, вы получаете дополнительные
// права доступа, описанные в GCC Runtime Library Исключением, версия
// 3.1, как, опубликованной Free Software Foundation.
 
// Вы должны были получить копию Лицензии GNU General Public License и
// копия GCC Runtime Library Исключением вместе с этой программой;
// см. файлы COPYING3 и COPYING.RUNTIME соответственно. Если нет, см.
// <http://www.gnu.org/licenses/>.
 
/** @файл include/c++0x_warning.h
* В Стандартной Библиотеки C++ заголовка.
*/
 
#ifndef _CXX0X_WARNING_H
#define _CXX0X_WARNING_H 1
 
#ifndef __GXX_EXPERIMENTAL_CXX0X__
#error Этот файл требует компилятора и библиотеки поддержки на предстоящих \
ISO C++, C++0x. Эта поддержка является экспериментальной, и, должно быть, \
включен с-std=c++0x или-std=gnu++0x опции компилятора.
#endif
 
#endif
Это мне выдал после компиляции.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7426 / 4541 / 675
Регистрация: 29.11.2010
Сообщений: 12,327
15.03.2013, 02:05 #10
C++
1
2
vector<int>::iterator uit = unique( vec.begin(), vec.end() );
vec.erase( uit, vec.end() );
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.03.2013, 15:53 #11
Genn55, Ведь написано же, что должен быть проставлен флажок -std=c++0x в опциях IDE или при компилировании из терминала
0
Genn55
370 / 217 / 41
Регистрация: 26.12.2012
Сообщений: 713
15.03.2013, 17:01  [ТС] #12
Как это сделать? С английским туго,а весь интерфейс английский.Делаю только первые шаги в программировании.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.03.2013, 17:04 #13
Genn55, Гугл в помощь. Я не знаю, что у вас за IDE - раз. Даже если бы знал - не факт, что я сам ей пользовался.
0
Genn55
370 / 217 / 41
Регистрация: 26.12.2012
Сообщений: 713
15.03.2013, 17:15  [ТС] #14
code::blocks 10-05.Все что я нагуглил больше на английском, а на русском только кратенькие переводы.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7426 / 4541 / 675
Регистрация: 29.11.2010
Сообщений: 12,327
15.03.2013, 18:45 #15
Genn55, вы можете либо дополнить свой код моими строками, они не требуют 11 стандарта, либо зайти в Settings > Compiler and Debugger и в Compiler flags поставить плюсик на "Have g++ follow the coming C++0x ISO C++ language standard [-std=c++0x]"

Genn55, хотите стать программистом без знания английского? Тогда ожидайте, что средняя зарплата по городу будет вашим потолком. Сразу привыкайте к языку.
1
15.03.2013, 18:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2013, 18:45
Привет! Вот еще темы с ответами:

.erase() в массиве. - C++
есть массив вектор например: vector&lt; pair&lt;char,int&gt; &gt; k; k.second мне надо его удалить как воспользоваться функции k.erase() ;...

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

stl::list erase() - C++
вот такой код есть, но не работает. как подправить? list&lt;int&gt; ls; list&lt;int&gt;::iterator it; for(int i=0; i&lt;5; i++) { ...

Шаблоны: insert, erase - C++
У меня проблема, как именно нужно описать main и проблема с функцией insert, мне сказали, что в ней может не быть места, чтобы вставить...


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

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

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