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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
#1

vector::erase()? - C++

30.12.2012, 12:53. Просмотров 1597. Ответов 30
Метки нет (Все метки)

есть вектор структур

C++
1
2
3
4
5
struct person{
    string name;
    int age;
 
vector <person> repw;
задача отсортировать вектор так, чтобы каждый последующий контейнер при условии совпадений поля name был удалён.

пытаюсь так

C++
1
2
3
4
int it1,it2;
    for (it1 = 0;it1!=repw.size();it1++)
        for (it2 = it1+1;it2!=repw.size();it2++)
            if(repw[it1].name==repw[it2].name) repw.erase(repw.begin()+it2);
не выходит. С итераторами колдовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2012, 12:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос vector::erase()? (C++):

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

std::vector::erase - C++
Всем привет. Буду очень рад, если кто-нибудь может мне объяснить логику... см. скриншот....

Крах при vector.erase() - C++
Всё вроде бы работает так, как мне надо...но когда остаётся 1 элемент и его нужно очистить, программа крашится. Что я сделал не так? ...

Функция Erase класса vector - C++
Нужно удалить из вектора, в котором объекты авторского класса, объекты с весом более 300. Написал цикл, но при запуске пишет Iterators...

Vector <bool> erase iterator outside range - C++
Помогите, пожалуйста. При компиляции появляется ошибка (фото ниже). Это реализация алгоритма Хаффмана. Не могу понять, что не так, по...

Ошибка в функции erase для vector - C++
cout &lt;&lt; &quot;How much numbers? : &quot;; int n; cin &gt;&gt; n; vector&lt;int&gt;array(n); for (int i = 0; i &lt; n; i++) { cin &gt;&gt; array; ...

30
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
30.12.2012, 15:40  [ТС] #16
Основной твой недочёт что при erase позиция i соответсвует следующему после удаляемого элемента и ты её на итерации проскакиваешь полагая что на i-м месте всё также будет удалённый элемент. Обрати внимание на i-- в моём коде...
точно не учёл что индексы сдвигаются, спасибо исправил всё заработало.

Добавлено через 11 минут
go, просто нет еще достаточного понимания контейнеров, поэтому с индексами будет попонятней пока.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,792
Записей в блоге: 17
30.12.2012, 15:41 #17
Цитата Сообщение от booker Посмотреть сообщение
go, просто нет еще достаточного понимания контейнеров, поэтому с индексами будет попонятней пока.
Ну собственно зачем тогда вообще использовать STL ?
0
booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
30.12.2012, 15:51  [ТС] #18
нужен был вектор, обычный динамический массив был бы менее эффективен в моём случае, свой вектор писать не хотелось))
0
-=ЮрА=-
30.12.2012, 16:11
  #19

Не по теме:

booker, многие на этом форуме мнят себя супер экспертами, не понимая, что на поверку не смогут даже что-то маломальски сложное написать, так что не бери в голову некоторые пустые замечания. От себя добавлю, что лично сам использую индексную адресацию и каких либо тормозов я не замечал, так что используй на здоровье если нравиться, захочешь потом перейдёшь на итераторы это всегда можно успеть сделать

0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,792
Записей в блоге: 17
30.12.2012, 16:13 #20
Всегда можно успеть пользоваться индексами, а с итераторов лучше начинать сразу...
Ибо это основы STL понимание которых дает возможности...
0
-=ЮрА=-
Заблокирован
Автор FAQ
30.12.2012, 16:14 #21
PS:booker, вот тебе хороший ресурс (не бери в голову что он на английском) там всё четко и с необходимыми примерами http://www.cplusplus.com/reference/v...ector/operator[]/ - в частности индексация. Кроме индексации кстати есть ещё метод std::vector.at - тоже интересная штучка http://www.cplusplus.com/reference/vector/vector/at/
0
go
30.12.2012, 18:33
  #22

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
захочешь потом перейдёшь на итераторы это всегда можно успеть сделать
к списку тоже будете по индексации обращаться?

0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
31.12.2012, 12:37 #23
Это кстати касяк с листом, там очень не хватает индиксатора!! После C# особенно трудно понять почему С++ ругается на [] в листе.
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
31.12.2012, 12:40 #24
Wolkodav, в чем проблема, можно перегрузить
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
31.12.2012, 12:41 #25
Цитата Сообщение от Wolkodav Посмотреть сообщение
Это кстати касяк с листом, там очень не хватает индиксатора!!
Индексировать список - как минимум странная идея - у этой операции будет линейная сложность.
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,792
Записей в блоге: 17
31.12.2012, 13:29 #26
Цитата Сообщение от Wolkodav Посмотреть сообщение
Это кстати касяк с листом, там очень не хватает индиксатора!! После C# особенно трудно понять почему С++ ругается на [] в листе.
На то он и C# что там не думают про эффективность...

Если вам нужна индексация и вы используете std::list это значит что вы не правильно выбрали контейнер.

В любом случае можно легко сначала использовать лист, а нужном месте перейти на вектор, путем копирования одного в другое.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 13:38 #27
Цитата Сообщение от Wolkodav Посмотреть сообщение
почему С++ ругается на [] в листе.
А какая там индексация? Это список, который мы привыкли видеть. В шарпе лиск это аналог вектора в С++
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
31.12.2012, 18:13 #28
Как и знал, что моя реплика вызовет просто кучу негодования непонимания и лучше бы я это не писал(
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,792
Записей в блоге: 17
31.12.2012, 20:34 #29
и лучше бы я это не писал(
Конечно, потому как она говорит что вы чет не понимаете...вот все и пытаются объяснить..
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
31.12.2012, 21:16 #30
Я говорю о том, что при переходе от C# к С++ в ходе работы возникают некоторые забавные ситуации и что хотелось бы что бы их было меньше путём добавления еще чего-то, не столь обременительного, но порой невредного.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2012, 21:16
Привет! Вот еще темы с ответами:

Ошибка при использовании erase для std::vector - C++
Почему в случае удаления элемента из вектора с помощью передачи итератора в erase, который соответствует позиции удаляемого элемента...

Ошибка “vector<bool> erase iterator outside range” при работе алгоритма Хаффмана - C++
Проблема с функцией BuildTable. Компилируется, но в процессе работы возникает ошибка. // Huffmann.cpp: определяет точку входа для...

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main - C++
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt;...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) - C++
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
31.12.2012, 21:16
Ответ Создать тему
Опции темы

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